De fleste større DBMS'er giver os en funktion til at erstatte nulværdier med en anden værdi.
Men navnet på funktionen har en tendens til at variere på tværs af DBMS'er. For eksempel har SQL Server en ISNULL()
funktion, mens andre (såsom MySQL, MariaDB og SQLite) har en IFNULL()
funktion til at gøre det samme.
Men for at forvirre sagerne har MySQL og MariaDB hver en ISNULL()
funktion, der fungerer anderledes end SQL Servers funktion af samme navn (MySQL og MariaDBs implementering accepterer kun et enkelt argument og returnerer 1
hvis den er null
og 0
hvis det ikke er).
I hvert fald, i tilfælde af Oracle Database, kan vi bruge NVL()
funktion til at erstatte null-værdier med en anden værdi.
Faktisk har Oracle Database også en NVL2()
funktion, der giver os mulighed for at angive en anden værdi til brug i tilfælde af, at det første argument ikke er null
.
Hvis vi blot vil teste om en værdi er null
eller ej, kan vi bruge IS NULL
betingelse (eller IS NOT NULL
for den modsatte test).
NVL()
Funktion
Her er et eksempel, der viser, hvordan NVL()
funktion virker:
SELECT NVL(null, 'Run')
FROM DUAL;
Resultat:
Run
I det tilfælde var det første argument null
og så det andet argument blev returneret.
Her er, hvad der sker, når det første argument ikke er null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Resultat:
Walk
Det første argument returneres.
NVL2()
Funktion
Som nævnt giver Oracle Database os også NVL2()
fungere. Denne funktion giver os mulighed for at angive en anden værdi til brug i tilfælde af, at det første argument ikke er null
.
Her er et eksempel på, hvordan det virker:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultat:
3
Det første argument var null
og så det tredje argument blev returneret.
Her er, hvad der sker, når det første argument ikke er null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultat:
2
Det andet argument returneres.
ER NULL og ER IKKE NULL
Betingelser
ER IKKE NULL
Betingelser
Hvis vi bare vil finde ud af, om en værdi er null
, kan vi bruge IS NULL
sammenligningstilstand. Vi kan alternativt bruge IS NOT NULL
for at kontrollere, om den ikke er null
.
Antag, at vi har følgende tabel:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultat:
ID | OE# | PRIS | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
I dette tilfælde er PRICE
kolonne indeholder en nulværdi for den første række, men ikke for den anden række.
Her er et eksempel på brug af IS NULL
mod det bord:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultat:
ID | OE# | PRIS | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Kun rækken med nulprisen returneres.
Her er, hvad der sker, når vi bruger IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Resultat:
ID | OE# | PRIS | MODEL |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Den anden række returneres.