SQLite има функция, наречена nullif()
и друга функция, наречена ifnull()
, всеки от които служи за различна цел.
nullif()
ви позволява да третирате определени стойности като NULL. Можете да мислите за това като „връщане на NULL, ако…“.ifnull()
ви позволява да замените NULL стойности с друга стойност. Можете да го мислите като „ако NULL, тогава…“.
Така че те основно правят обратното един на друг. Едната заменя стойностите NULL с друга стойност, а другата заменя друга стойност с NULL.
Примери
В някои случаи и двете функции могат да върнат един и същ резултат. Например:
SELECT
nullif(1, 2),
ifnull(1, 2);
Резултат:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
nullif()
функцията връща копие на първия си аргумент, ако аргументите са различни, и NULL, ако аргументите са еднакви. В този случай аргументите са различни и той връща първия аргумент.
ifnull()
функцията, от друга страна, връща копие на първия аргумент, различен от NULL. В този случай и двата аргумента не са NULL и така първият аргумент беше върнат.
Със следния пример започваме да виждаме разликата между тези две функции:
SELECT
nullif(1, 1),
ifnull(1, 1);
Резултат:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
nullif()
функцията връща NULL, когато и двата аргумента са еднакви. В този случай и двата аргумента бяха еднакви и така nullif()
свърши работата си и върна NULL.
ifnull()
функцията връща първия аргумент, различен от NULL, и така в този случай връща първия аргумент.
Фактът, че и двата аргумента са еднакви, не означава нищо за ifnull()
. Той просто връща първия аргумент, различен от NULL. Като каза това, ако и двата аргумента са NULL, тогава той връща NULL.
Нека опитаме да добавим няколко NULL.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Резултат:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
В този случай nullif()
върна NULL, защото NULL е първият аргумент (припомнете си, че nullif()
връща първия си аргумент, ако и двата аргумента са различни).
ifnull()
от друга страна върна първия си аргумент, различен от NULL.
Ето как изглежда, ако сменим аргументите.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Резултат:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
И двата аргумента са различни и така nullif()
връща първия аргумент.
Първият аргумент не е NULL и така ifnull()
го връща.