MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB NULLIF() erklärt

In MariaDB das NULLIF() Funktion gibt NULL zurück wenn beide Argumente äquivalent sind. Andernfalls wird das erste Argument zurückgegeben.

Syntax

Die Syntax lautet wie folgt:

NULLIF(expr1,expr2)

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SELECT NULLIF( 5, 5 );

Ergebnis:

NULL

In diesem Fall sind beide Argumente identisch und daher ist das Ergebnis NULL .

Wenn die Argumente nicht gleichwertig sind

Folgendes passiert, wenn die Argumente nicht äquivalent sind:

SELECT NULLIF( 5, 3 );

Ergebnis:

5

In diesem Fall wird das erste Argument zurückgegeben.

Strings

Hier ist ein Beispiel, das Strings vergleicht:

SELECT 
    NULLIF( 'Papaya', 'Papaya' ) AS "Same",
    NULLIF( 'Papaya', 'Salad' ) AS "Different";

Ergebnis:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Papaya    |
+------+-----------+

Termine

Hier ist ein Beispiel, das Datumsangaben vergleicht:

SELECT 
    NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
    NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";

Ergebnis:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2000-10-30 |
+------+------------+

Ausdrücke

NULLIF() wertet den aktuellen Wert der Ausdrücke aus. Wenn wir also einen Ausdruck wie diesen übergeben:

SELECT NULLIF( 10, 2 * 5 );

Wir bekommen das:

NULL

2 multipliziert mit 5 ergibt 10, also sind die beiden Argumente äquivalent.

Folgendes passiert, wenn wir das zweite Argument ändern:

SELECT NULLIF( 10, 3 * 5 );

Ergebnis:

10

Das erste Argument wird zurückgegeben.

Ein Datenbankbeispiel

Angenommen, wir führen die folgende Abfrage aus:

SELECT 
    Name,
    LocalName
FROM country 
ORDER BY Name ASC
LIMIT 10;

Ergebnis:

+---------------------+-----------------------+
| Name                | LocalName             |
+---------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan |
| Albania             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         |
| Andorra             | Andorra               |
| Angola              | Angola                |
| Anguilla            | Anguilla              |
| Antarctica          | –                     |
| Antigua and Barbuda | Antigua and Barbuda   |
| Argentina           | Argentina             |
+---------------------+-----------------------+

Hier haben wir in der linken Spalte die Ländernamen und in der rechten den lokalen Namen für das jeweilige Land.

Lassen Sie uns NULLIF() hinzufügen zu einer dritten Spalte unserer Abfrage:

SELECT 
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name Different"
FROM country 
ORDER BY Name ASC
LIMIT 10;

Ergebnis:

+---------------------+-----------------------+-----------------------+
| Name                | LocalName             | Local Name Different  |
+---------------------+-----------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan | Afganistan/Afqanestan |
| Albania             | Shqipëria             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         | Amerika Samoa         |
| Andorra             | Andorra               | NULL                  |
| Angola              | Angola                | NULL                  |
| Anguilla            | Anguilla              | NULL                  |
| Antarctica          | –                     | –                     |
| Antigua and Barbuda | Antigua and Barbuda   | NULL                  |
| Argentina           | Argentina             | NULL                  |
+---------------------+-----------------------+-----------------------+

Wir können sehen, dass die dritte Spalte den lokalen Namen nur zurückgibt, wenn er sich von dem Wert in Name unterscheidet Säule. Wenn es gleich ist, dann NULL zurückgegeben wird.

Wir können alternativ NULLIF() verwenden So filtern Sie unsere Abfrageergebnisse:

SELECT 
    Name,
    LocalName
FROM country 
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;

Ergebnis:

+----------------+-----------------------+
| Name           | LocalName             |
+----------------+-----------------------+
| Afghanistan    | Afganistan/Afqanestan |
| Albania        | Shqipëria             |
| Algeria        | Al-Jaza’ir/Algérie    |
| American Samoa | Amerika Samoa         |
| Antarctica     | –                     |
| Armenia        | Hajastan              |
| Austria        | Österreich            |
| Azerbaijan     | Azärbaycan            |
| Bahamas        | The Bahamas           |
| Bahrain        | Al-Bahrayn            |
+----------------+-----------------------+

In diesem Fall haben wir nur die Zeilen zurückgegeben, in denen sich der lokale Name von Name unterscheidet Spalte.

NULLIF() vs. CASE

Der folgende Code:

NULLIF(expr1,expr2)

entspricht dem folgenden CASE Ausdruck:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Falsche Parameteranzahl

Das Übergeben der falschen Anzahl von Argumenten führt zu einem Fehler:

SELECT NULLIF( 10 );

Ergebnis:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'