In MySQL NULLIF()
ist eine Flusssteuerungsfunktion, die NULL
zurückgibt wenn beide Argumente äquivalent sind. Andernfalls wird das erste Argument zurückgegeben.
Syntax
Die Syntax sieht so aus:
NULLIF(expr1,expr2)
Beispiel
Hier ist ein Beispiel zur Veranschaulichung:
SELECT NULLIF( 7, 7 );
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( 7, 8 );
Ergebnis:
7
Die Argumente sind unterschiedlich und daher wird das erste Argument zurückgegeben.
Strings
Hier ist ein Beispiel, das Strings vergleicht:
SELECT
NULLIF( 'Bean', 'Bean' ) AS "Same",
NULLIF( 'Bean', 'Mushroom' ) AS "Different";
Ergebnis:
Same Different ---- --------- NULL Bean
Termine
Hier ist ein Beispiel, das Datumsangaben vergleicht:
SELECT
NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";
Ergebnis:
Same Different ---- ---------- NULL 2030-12-20
Ausdrücke
NULLIF()
wertet den aktuellen Wert der Ausdrücke aus. Wenn wir also einen Ausdruck wie diesen übergeben:
SELECT NULLIF( 8, 2 * 4 );
Wir bekommen das:
NULL
2 multipliziert mit 4 ergibt 8, also sind die beiden Argumente äquivalent.
Folgendes passiert, wenn wir das zweite Argument ändern:
SELECT NULLIF( 8, 2 * 3 );
Ergebnis:
8
Das erste Argument wird zurückgegeben.
Ein Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
Ergebnis:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Andorra | Andorra | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Gibraltar | Gibraltar | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Malta | Malta | | Portugal | Portugal | | San Marino | San Marino | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
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 if Different"
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
Ergebnis:
+-------------------------------+--------------------------------+--------------------------------+ | Name | LocalName | Local Name if Different | +-------------------------------+--------------------------------+--------------------------------+ | Albania | Shqipëria | Shqipëria | | Andorra | Andorra | NULL | | Bosnia and Herzegovina | Bosna i Hercegovina | Bosna i Hercegovina | | Croatia | Hrvatska | Hrvatska | | Gibraltar | Gibraltar | NULL | | Greece | Elláda | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | Santa Sede/Città del Vaticano | | Italy | Italia | Italia | | Macedonia | Makedonija | Makedonija | | Malta | Malta | NULL | | Portugal | Portugal | NULL | | San Marino | San Marino | NULL | | Slovenia | Slovenija | Slovenija | | Spain | España | España | | Yugoslavia | Jugoslavija | Jugoslavija | +-------------------------------+--------------------------------+--------------------------------+
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 auch NULLIF()
verwenden So filtern Sie unsere Abfrageergebnisse:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;
Ergebnis:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
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( 5 );
Ergebnis:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'