I MariaDB, IFNULL()
funktion låter oss ersätta NULL-värden med ett annat värde.
Syntax
IFNULL(expr1,expr2)
Om expr1
är inte NULL
, IFNULL()
returnerar expr1
; annars returnerar den expr2
.
Dessutom, från MariaDB 10.3, NVL()
kan användas som ett alias för IFNULL()
fungera. Därför har vi möjlighet att använda följande syntax istället:
NVL(expr1,expr2)
Resultatet är detsamma oavsett vilken syntax som används.
Exempel
Här är ett grundläggande exempel som använder NULL
konstant:
SELECT IFNULL( null, 'No Value' );
Resultat:
No Value
I det här fallet använde jag IFNULL()
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 IFNULL( 'Spicy', 'No Value' );
Resultat:
Spicy
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 IFNULL()
för att ersätta NULL-värdena med ett mer meningsfullt värde för läsaren:
SELECT
empId,
name,
IFNULL( 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 IFNULL( 3 * 7, 0 );
Vi får det här:
21
Så vi får inte 3 * 7
del. Vi får resultatet av det uttrycket (som i det här fallet är 21
).
Detsamma gäller när resultatet av uttrycket är NULL
. Till exempel, om vi kör följande kod:
SELECT IFNULL( 3 / 0, 0 );
Vi får det här:
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.
Därför är det i sådana fall 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 IFNULL( 3 / 0, 'No value' );
Resultat:
No Value
NVL()
Funktion
Börjar med MariaDB 10.3, NVL()
är ett alias för IFNULL()
. Därför kan vi ersätta IFNULL()
med NVL()
i något av exemplen ovan.
Exempel:
SELECT NVL( 3 / 0, 'No value' );
Resultat:
No Value