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() го връща.