In MariaDB, de NULLIF()
functie retourneert NULL
als beide argumenten equivalent zijn. Anders wordt het eerste argument geretourneerd.
Syntaxis
De syntaxis gaat als volgt:
NULLIF(expr1,expr2)
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT NULLIF( 5, 5 );
Resultaat:
NULL
In dit geval zijn beide argumenten identiek en is het resultaat NULL
.
Als de argumenten niet gelijkwaardig zijn
Dit is wat er gebeurt als de argumenten niet equivalent zijn:
SELECT NULLIF( 5, 3 );
Resultaat:
5
In dit geval wordt het eerste argument geretourneerd.
Snaren
Hier is een voorbeeld dat strings vergelijkt:
SELECT
NULLIF( 'Papaya', 'Papaya' ) AS "Same",
NULLIF( 'Papaya', 'Salad' ) AS "Different";
Resultaat:
+------+-----------+ | Same | Different | +------+-----------+ | NULL | Papaya | +------+-----------+
Datums
Hier is een voorbeeld dat datums vergelijkt:
SELECT
NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";
Resultaat:
+------+------------+ | Same | Different | +------+------------+ | NULL | 2000-10-30 | +------+------------+
Uitdrukkingen
NULLIF()
evalueert de huidige waarde van de uitdrukkingen. Daarom, als we een uitdrukking als deze doorgeven:
SELECT NULLIF( 10, 2 * 5 );
We krijgen dit:
NULL
2 vermenigvuldigd met 5 is 10, en dus zijn de twee argumenten equivalent.
Dit is wat er gebeurt als we het tweede argument veranderen:
SELECT NULLIF( 10, 3 * 5 );
Resultaat:
10
Het eerste argument wordt geretourneerd.
Een databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SELECT
Name,
LocalName
FROM country
ORDER BY Name ASC
LIMIT 10;
Resultaat:
+---------------------+-----------------------+ | 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 hebben we landnamen in de linkerkolom en de lokale naam voor het betreffende land in de rechterkolom.
Laten we NULLIF()
. toevoegen naar een derde kolom van onze zoekopdracht:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name Different"
FROM country
ORDER BY Name ASC
LIMIT 10;
Resultaat:
+---------------------+-----------------------+-----------------------+ | 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 | +---------------------+-----------------------+-----------------------+
We kunnen zien dat de derde kolom de lokale naam alleen retourneert als deze verschilt van de waarde in de Name
kolom. Als het hetzelfde is, dan NULL
wordt geretourneerd.
We kunnen ook NULLIF()
. gebruiken om onze zoekopdrachtresultaten te filteren:
SELECT
Name,
LocalName
FROM country
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;
Resultaat:
+----------------+-----------------------+ | 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 dit geval hebben we alleen die rijen geretourneerd waar de lokale naam anders is dan de Name
kolom.
NULLIF()
vs CASE
De volgende code:
NULLIF(expr1,expr2)
is gelijk aan het volgende CASE
uitdrukking:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
Onjuist aantal parameters
Het verkeerde aantal argumenten doorgeven, resulteert in een fout:
SELECT NULLIF( 10 );
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'