Från MariaDB 10.3, NVL()
kan användas som ett alias för IFNULL()
fungera. Därför gör båda funktionerna det möjligt för oss att ersätta NULL-värden med ett annat värde.
Syntax
NVL(expr1,expr2)
Om expr1
är inte NULL
, NVL()
returnerar expr1
; annars returnerar den expr2
.
Givet NVL()
är ett alias för IFNULL()
, kan vi också använda följande syntax:
IFNULL(expr1,expr2)
Båda ovanstående syntaxer ger samma resultat.
Exempel
Här är ett grundläggande exempel som använder NULL
konstant:
SELECT NVL( null, 'No Value' );
Resultat:
No Value
I det här fallet använde jag NVL()
för att ersätta NULL-värdet med No Value
.
Här är vad som händer när det första argumentet inte är NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Resultat:
Green
I det här fallet returneras det första argumentet, eftersom det inte är NULL
.
Databasexempel
Anta att vi kör följande fråga:
SELECT * FROM Employees;
Resultat:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Vi kan se att två rader har NULL-värden i dept
kolumn.
I följande fråga använder vi NVL()
för att ersätta NULL-värdena med ett mer meningsfullt värde för läsaren:
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
Uttryck
Det aktuella värdet på det första argumentet utvärderas. Därför, om vi tillhandahåller ett uttryck som följande:
SELECT NVL( 4 * 10, 0 );
Vi får detta:
40
Så vi får inte 4 * 10
del. Vi får resultatet av det uttrycket (som i det här fallet är 40
).
Detsamma gäller när resultatet av uttrycket är NULL
:
SELECT NVL( 4 / 0, 0 );
Resultat:
0.0000
Detta är dock ett farligt exempel. Noll är ett värde. NULL
är inte.
Att returnera noll när det finns ett NULL-värde kan vara missvisande eller till och med helt fel. Tänk om vi hade att göra med priser. Vi kan sluta med ett pris på noll, vilket kan vara felaktigt och kosta verksamheten mycket pengar.
I sådana fall är det vanligtvis bättre att använda ett mer meningsfullt värde som förmedlar till läsaren att det inte finns något värde.
Exempel:
SELECT NVL( 4 / 0, 'No value' );
Resultat:
No Value
IFNULL()
Funktion
Som nämnts, NVL()
är ett alias för IFNULL()
. Därför kan vi ersätta NVL()
med IFNULL()
i något av exemplen ovan.
Exempel:
SELECT IFNULL( 4 / 0, 'No value' );
Resultat:
No Value