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'