SQLite har en funktion kaldet nullif()
og en anden funktion kaldet ifnull()
, som hver tjener et andet formål.
nullif()
giver dig mulighed for at behandle visse værdier som NULL. Du kan tænke på det som "return NULL hvis ...".ifnull()
giver dig mulighed for at erstatte NULL-værdier med en anden værdi. Du kan tænke på det som "hvis NULL, så ...".
Så de gør i bund og grund det modsatte af hinanden. Den ene erstatter NULL-værdier med en anden værdi, og den anden erstatter en anden værdi med NULL.
Eksempler
I nogle tilfælde kan begge funktioner returnere det samme resultat. For eksempel:
SELECT
nullif(1, 2),
ifnull(1, 2);
Resultat:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
nullif()
funktion returnerer en kopi af dets første argument, hvis argumenterne er forskellige, og NULL, hvis argumenterne er ens. I dette tilfælde er argumenterne forskellige, og det returnerer det første argument.
ifnull()
funktion returnerer på den anden side en kopi af det første ikke-NULL-argument. I dette tilfælde var begge argumenter ikke-NULL, og derfor blev det første argument returneret.
Med følgende eksempel begynder vi at se forskellen mellem disse to funktioner:
SELECT
nullif(1, 1),
ifnull(1, 1);
Resultat:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
nullif()
funktion returnerer NULL, når begge argumenter var ens. I dette tilfælde var begge argumenter de samme, og så nullif()
gjorde sit arbejde og returnerede NULL.
ifnull()
funktion returnerer det første ikke-NULL-argument, og i dette tilfælde returnerede det det første argument.
Det faktum, at begge argumenter er ens, betyder intet for ifnull()
. Det returnerer simpelthen det første ikke-NULL-argument. Når det er sagt, hvis begge argumenter er NULL, returnerer det NULL.
Lad os prøve at tilføje nogle NULL.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Resultat:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
I dette tilfælde nullif()
returnerede NULL, fordi NULL er det første argument (husk at nullif()
returnerer sit første argument, hvis begge argumenter er forskellige).
ifnull()
på den anden side returnerede sit første ikke-NULL-argument.
Sådan ser det ud, hvis vi skifter argumenterne rundt.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Resultat:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
Begge argumenter er forskellige og derfor nullif()
returnerer det første argument.
Det første argument er ikke NULL og så ifnull()
returnerer det.