W MariaDB funkcja IFNULL()
funkcja pozwala nam zastąpić wartości NULL inną wartością.
Składnia
IFNULL(expr1,expr2)
Jeśli expr1
nie jest NULL
, IFNULL()
zwraca expr1
; w przeciwnym razie zwraca expr2
.
Ponadto, z MariaDB 10.3, NVL()
może być używany jako alias dla IFNULL()
funkcjonować. Dlatego zamiast tego mamy możliwość użycia następującej składni:
NVL(expr1,expr2)
Wynik jest taki sam, niezależnie od użytej składni.
Przykład
Oto podstawowy przykład, który używa NULL
stała:
SELECT IFNULL( null, 'No Value' );
Wynik:
No Value
W tym przypadku użyłem IFNULL()
zamienić wartość NULL na No Value
.
Oto, co się dzieje, gdy pierwszym argumentem nie jest NULL
:
SELECT IFNULL( 'Spicy', 'No Value' );
Wynik:
Spicy
W tym przypadku zwracany jest pierwszy argument, ponieważ nie jest on NULL
.
Przykład bazy danych
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT * FROM Employees;
Wynik:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Widzimy, że dwa wiersze mają wartości NULL w dept
kolumna.
W poniższym zapytaniu używamy IFNULL()
aby zastąpić wartości NULL bardziej znaczącą wartością dla czytelnika:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Wynik:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Wyrażenia
Oceniana jest bieżąca wartość pierwszego argumentu. Dlatego jeśli dostarczymy wyrażenie podobne do następującego:
SELECT IFNULL( 3 * 7, 0 );
Otrzymujemy to:
21
Tak więc nie otrzymujemy 3 * 7
część. Otrzymujemy wynik tego wyrażenia (którym w tym przypadku jest 21
).
To samo dotyczy sytuacji, gdy wynikiem wyrażenia jest NULL
. Na przykład, jeśli uruchomimy następujący kod:
SELECT IFNULL( 3 / 0, 0 );
Otrzymujemy to:
0.0000
Jest to jednak niebezpieczny przykład. Zero to wartość. NULL
nie jest.
Zwracanie zera, gdy występuje wartość NULL, może być mylące lub nawet całkowicie błędne. Wyobraź sobie, że mamy do czynienia z cenami. Możemy otrzymać cenę zerową, co może być niepoprawne i kosztować firmę dużo pieniędzy.
Dlatego w takich przypadkach zwykle lepiej jest użyć bardziej znaczącej wartości, która informuje czytelnika, że nie ma żadnej wartości.
Przykład:
SELECT IFNULL( 3 / 0, 'No value' );
Wynik:
No Value
NVL()
Funkcja
Począwszy od MariaDB 10.3, NVL()
jest aliasem dla IFNULL()
. Dlatego możemy zastąpić IFNULL()
z NVL()
w każdym z powyższych przykładów.
Przykład:
SELECT NVL( 3 / 0, 'No value' );
Wynik:
No Value