MySQL har en IFNULL()
funktion som gör att vi enkelt kan 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
.
Exempel
Här är ett grundläggande exempel som använder NULL
konstant:
SELECT IFNULL( null, 'n/a' );
Resultat:
n/a
I det här fallet använde jag IFNULL()
för att ersätta NULL-värdet med strängen n/a
.
Här är vad som händer när det första argumentet inte är NULL
:
SELECT IFNULL( 'Cow', 'n/a' );
Resultat:
Cow
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
PetName,
DOB
FROM Pets;
Resultat:
+---------+------------+ | PetName | DOB | +---------+------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+------------+
Vi kan se att två rader har NULL-värden i DOB-kolumnen.
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
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Resultat:
+---------+--------------------------------+ | PetName | IFNULL( DOB, 'None supplied' ) | +---------+--------------------------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None supplied | | Meow | None supplied | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+--------------------------------+
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( 2 * 5, 0 );
Vi får detta:
10
Så vi får inte 2 * 5
del. Vi får resultatet av det uttrycket (som i det här fallet är 10
).
Detsamma gäller när resultatet av uttrycket är NULL
:
SELECT IFNULL( 2 / 0, 0 );
Vi får detta:
0.0000
Det lönar sig dock att vara försiktig. Noll är ett värde. NULL
är inte.
I exemplet ovan returnerade jag noll när det fanns ett NULL-värde, men detta kan vara missvisande eller till och med helt fel. Tänk om vi skulle dela priserna och resultatet blev ett pris på noll. OK, om vi dividerar ett pris med noll är det förmodligen något annat fel, men jag är säker på att du förstår min poäng.
Hur som helst ä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 IFNULL( 2 / 0, 'No value' );
Resultat:
No value