Z MariaDB 10.3, NVL()
może być używany jako alias dla IFNULL()
funkcjonować. Dlatego obie funkcje umożliwiają nam zastąpienie wartości NULL inną wartością.
Składnia
NVL(expr1,expr2)
Jeśli expr1
nie jest NULL
, NVL()
zwraca expr1
; w przeciwnym razie zwraca expr2
.
Biorąc pod uwagę NVL()
jest aliasem dla IFNULL()
, możemy również użyć następującej składni:
IFNULL(expr1,expr2)
Obie powyższe składnie zwracają ten sam wynik.
Przykład
Oto podstawowy przykład, który używa NULL
stała:
SELECT NVL( null, 'No Value' );
Wynik:
No Value
W tym przypadku użyłem NVL()
zamienić wartość NULL na No Value
.
Oto, co się dzieje, gdy pierwszym argumentem nie jest NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Wynik:
Green
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 NVL()
aby zastąpić wartości NULL bardziej znaczącą wartością dla czytelnika:
SELECT
empId,
name,
NVL( 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 NVL( 4 * 10, 0 );
Otrzymujemy to:
40
Tak więc nie otrzymujemy 4 * 10
część. Otrzymujemy wynik tego wyrażenia (którym w tym przypadku jest 40
).
To samo dotyczy sytuacji, gdy wynikiem wyrażenia jest NULL
:
SELECT NVL( 4 / 0, 0 );
Wynik:
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.
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 NVL( 4 / 0, 'No value' );
Wynik:
No Value
IFNULL()
Funkcja
Jak wspomniano, NVL()
jest aliasem dla IFNULL()
. Dlatego możemy zastąpić NVL()
z IFNULL()
w każdym z powyższych przykładów.
Przykład:
SELECT IFNULL( 4 / 0, 'No value' );
Wynik:
No Value