Fra MariaDB 10.3, NVL()
kan bruges som et alias for IFNULL()
fungere. Derfor gør begge funktioner os i stand til at erstatte NULL-værdier med en anden værdi.
Syntaks
NVL(expr1,expr2)
Hvis expr1
er ikke NULL
, NVL()
returnerer expr1
; ellers returnerer den expr2
.
Givet NVL()
er et alias for IFNULL()
, kan vi også bruge følgende syntaks:
IFNULL(expr1,expr2)
Begge ovenstående syntakser returnerer det samme resultat.
Eksempel
Her er et grundlæggende eksempel, der bruger NULL
konstant:
SELECT NVL( null, 'No Value' );
Resultat:
No Value
I dette tilfælde brugte jeg NVL()
for at erstatte NULL-værdien med No Value
.
Her er, hvad der sker, når det første argument ikke er NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Resultat:
Green
I dette tilfælde returneres det første argument, fordi det ikke er NULL
.
Databaseeksempel
Antag, at vi kører følgende forespørgsel:
SELECT * FROM Employees;
Resultat:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Vi kan se, at to rækker har NULL-værdier i dept
kolonne.
I den følgende forespørgsel bruger vi NVL()
for at erstatte NULL-værdierne med en mere meningsfuld værdi for læseren:
SELECT
empId,
name,
NVL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Resultat:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Udtryk
Den aktuelle værdi af det første argument evalueres. Derfor, hvis vi giver et udtryk som følgende:
SELECT NVL( 4 * 10, 0 );
Vi får dette:
40
Så vi får ikke 4 * 10
en del. Vi får resultatet af det udtryk (som i dette tilfælde er 40
).
Det samme gælder, når resultatet af udtrykket er NULL
:
SELECT NVL( 4 / 0, 0 );
Resultat:
0.0000
Dette er dog et farligt eksempel. Nul er en værdi. NULL
er ikke.
At returnere nul, når der er en NULL-værdi, kan være vildledende eller endda helt forkert. Tænk, hvis vi havde med priser at gøre. Vi kan ende med en pris på nul, hvilket kan være forkert og koste forretningen mange penge.
I sådanne tilfælde er det normalt bedre at bruge en mere meningsfuld værdi, der formidler til læseren, at der ikke er nogen værdi.
Eksempel:
SELECT NVL( 4 / 0, 'No value' );
Resultat:
No Value
IFNULL()
Funktion
Som nævnt, NVL()
er et alias for IFNULL()
. Derfor kan vi erstatte NVL()
med IFNULL()
i et af ovenstående eksempler.
Eksempel:
SELECT IFNULL( 4 / 0, 'No value' );
Resultat:
No Value