SQLite har en funktion som heter nullif()
och en annan funktion som heter ifnull()
, som var och en har olika syften.
nullif()
låter dig behandla vissa värden som NULL. Du kan se det som "return NULL if ...".ifnull()
låter dig ersätta NULL-värden med ett annat värde. Du kan tänka på det som "om NULL, då ...".
Så de gör i princip motsatsen till varandra. En ersätter NULL-värden med ett annat värde, och den andra ersätter ett annat värde med NULL.
Exempel
I vissa fall kan båda funktionerna returnera samma resultat. Till exempel:
SELECT
nullif(1, 2),
ifnull(1, 2);
Resultat:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
nullif()
funktion returnerar en kopia av sitt första argument om argumenten är olika och NULL om argumenten är desamma. I det här fallet är argumenten olika och det returnerar det första argumentet.
ifnull()
funktion å andra sidan, returnerar en kopia av det första icke-NULL-argumentet. I det här fallet var båda argumenten icke-NULL och därför returnerades det första argumentet.
Med följande exempel börjar vi se skillnaden mellan dessa två funktioner:
SELECT
nullif(1, 1),
ifnull(1, 1);
Resultat:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
nullif()
funktion returnerar NULL när båda argumenten var samma. I det här fallet var båda argumenten desamma, och så nullif()
gjorde sitt jobb och returnerade NULL.
ifnull()
funktion returnerar det första icke-NULL-argumentet, och i det här fallet returnerade den det första argumentet.
Det faktum att båda argumenten är samma betyder ingenting för ifnull()
. Det returnerar helt enkelt det första icke-NULL-argumentet. Med det sagt, om båda argumenten är NULL så returnerar det NULL.
Låt oss försöka lägga till några NULL.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Resultat:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
I det här fallet, nullif()
returnerade NULL eftersom NULL är det första argumentet (kom ihåg att nullif()
returnerar sitt första argument om båda argumenten är olika).
ifnull()
å andra sidan returnerade sitt första icke-NULL-argument.
Så här ser det ut om vi byter argument.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Resultat:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
Båda argumenten är olika och så nullif()
returnerar det första argumentet.
Det första argumentet är inte NULL och så ifnull()
returnerar den.