In SQL Server, de NULLIF()
expressie controleert de waarde van twee opgegeven expressies. Het retourneert een null-waarde als ze gelijk zijn, anders wordt de eerste expressie geretourneerd.
Syntaxis
De syntaxis gaat als volgt:
NULLIF ( expression , expression )
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT NULLIF(3, 3);
Resultaat:
NULL
Hier zijn beide uitdrukkingen gelijk, en dus is het resultaat een null-waarde.
Dit is wat er gebeurt als de uitdrukkingen niet gelijk zijn:
SELECT NULLIF(3, 7);
Resultaat:
3
Deze keer wordt de eerste waarde geretourneerd.
Hier is een voorbeeld dat beide uitkomsten samenvat:
SELECT
NULLIF(0, 0) AS a,
NULLIF(3, 3) AS b,
NULLIF(3, 0) AS c,
NULLIF(0, 3) AS d;
Resultaat:
+------+------+-----+-----+ | a | b | c | d | |------+------+-----+-----| | NULL | NULL | 3 | 0 | +------+------+-----+-----+
Een praktisch voorbeeld
Stel dat we een tabel hebben met de volgende gegevens:
SELECT
ProductName,
ProductPrice
FROM Products;
Resultaat:
+-------------------------------------+----------------+ | ProductName | ProductPrice | |-------------------------------------+----------------| | Left handed screwdriver | 25.99 | | Long Weight (blue) | 14.75 | | Long Weight (green) | 11.99 | | Smash 2000 Sledgehammer | 0.00 | | Chainsaw (includes 3 spare fingers) | 0.00 | | Straw Dog Box | NULL | | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Right handed screwdriver | 25.99 | +-------------------------------------+----------------+ (8 rows affected)
En stel dat we willen weten hoeveel producten een positieve prijs hebben. Met andere woorden, we willen geen producten opnemen met een prijs of nul- of nulwaarde.
Om dit te doen, kunnen we NULLIF()
. gebruiken in combinatie met de COUNT()
functie:
SELECT
COUNT(NULLIF(ProductPrice, 0.00)) AS Result
FROM Products;
Resultaat:
+----------+ | Result | |----------| | 5 | +----------+ Warning: Null value is eliminated by an aggregate or other SET operation.
We krijgen 5 zoals verwacht, wat precies is hoeveel rijen een positieve waarde hebben in de ProductPrice
kolom.
Dit werkt omdat de COUNT()
functie telt alleen niet-null-waarden. Door de nulbedragen om te zetten in null, kunnen we die waarden in onze berekening negeren.
Hier is het weer zonder de NULLIF()
functie.
SELECT COUNT(ProductPrice) AS Result
FROM Products;
Resultaat:
+----------+ | Result | |----------| | 7 | +----------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Deze keer bevat het de nulbedragen en krijgen we 7. Het negeert rij 6 nog steeds omdat dat eigenlijk een null-waarde heeft.
Als het eerste argument de nulconstante is
De functie accepteert de nulconstante niet als het eerste argument:
SELECT NULLIF(null, 3);
Resultaat:
Msg 4151, Level 16, State 1, Line 1 The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.
Zoals de foutmelding aangeeft, moet het type van het eerste argument bekend zijn. De retourwaarde van de functie gebruikt het gegevenstype van de eerste uitdrukking, en deze fout geeft dat weer.
Deze fout zou vrij zeldzaam moeten zijn. In de meeste gevallen geeft u een kolomnaam door als eerste argument en in SQL Server hebben kolommen een gedefinieerd gegevenstype. In dergelijke gevallen wordt een null-waarde daadwerkelijk geaccepteerd, omdat SQL Server het gegevenstype van de kolom kent.
Hetzelfde kan gezegd worden voor variabelen. Als je een variabele doorgeeft, zou je het type moeten declareren en daarom zou je de fout niet krijgen.
Ongeldig aantal argumenten
Het aanroepen van de functie zonder het doorgeven van argumenten resulteert in een fout:
SELECT NULLIF();
Resultaat:
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ')'.
En het doorgeven van te veel argumenten veroorzaakt ook een fout:
SELECT NULLIF(1, 2, 3);
Resultaat:
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ','.