SQLite posiada funkcję o nazwie nullif()
i inną funkcję o nazwie ifnull()
, z których każdy służy do innego celu.
nullif()
pozwala traktować pewne wartości jako NULL. Możesz myśleć o tym jako „zwróć NULL, jeśli…”.ifnull()
umożliwia zastąpienie wartości NULL inną wartością. Możesz myśleć o tym jako „jeśli NULL, to…”.
Więc w zasadzie robią coś przeciwnego. Jedna zastępuje wartości NULL inną wartością, a druga zastępuje inną wartość NULL.
Przykłady
W niektórych przypadkach obie funkcje mogą zwrócić ten sam wynik. Na przykład:
SELECT
nullif(1, 2),
ifnull(1, 2);
Wynik:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
nullif()
funkcja zwraca kopię swojego pierwszego argumentu, jeśli argumenty są różne i NULL, jeśli argumenty są takie same. W tym przypadku argumenty są różne i zwraca pierwszy argument.
ifnull()
z drugiej strony funkcja zwraca kopię pierwszego argumentu innego niż NULL. W tym przypadku oba argumenty były różne od NULL, więc został zwrócony pierwszy argument.
W poniższym przykładzie zaczynamy dostrzegać różnicę między tymi dwiema funkcjami:
SELECT
nullif(1, 1),
ifnull(1, 1);
Wynik:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
nullif()
funkcja zwraca NULL, gdy oba argumenty były takie same. W tym przypadku oba argumenty były takie same, więc nullif()
wykonał swoją pracę i zwrócił NULL.
ifnull()
funkcja zwraca pierwszy argument inny niż NULL, więc w tym przypadku zwróciła pierwszy argument.
Fakt, że oba argumenty są takie same, nic nie znaczy dla ifnull()
. Po prostu zwraca pierwszy argument inny niż NULL. To powiedziawszy, jeśli oba argumenty są NULL, to zwraca NULL.
Spróbujmy dodać kilka wartości NULL.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Wynik:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
W tym przypadku nullif()
zwrócił NULL, ponieważ NULL jest pierwszym argumentem (przypomnij sobie, że nullif()
zwraca swój pierwszy argument, jeśli oba argumenty są różne).
ifnull()
z drugiej strony zwrócił swój pierwszy argument inny niż NULL.
Oto, jak to wygląda, gdy zamienimy się argumentami.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Wynik:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
Oba argumenty są różne, więc nullif()
zwraca pierwszy argument.
Pierwszy argument nie ma wartości NULL, więc ifnull()
zwraca go.