I MySQL vill du ibland inte att NULL-värden ska returneras som NULL
. Ibland vill du att NULL-värden ska returneras med ett annat värde, som "N/A", "Inte tillämpligt", "Ingen" eller till och med den tomma strängen "".
Lyckligtvis finns det flera sätt att göra detta i MySQL.
Här är fyra:
IFNULL()
funktionCOALESCE()
funktionIF()
funktion kombinerad medIS NULL
(ellerIS NOT NULL
) operatörCASE
uttryck kombinerat medIS NULL
(ellerIS NOT NULL
) operatör
Exempel på dessa alternativ finns nedan.
Exempeldata
Låt oss först ta några exempeldata:
USE Solutions; SELECT TaskCode From Tasks;
Resultat:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Så vi har tre NULL-värden och tre icke-NULL-värden.
IFNULL()-funktionen
Med tanke på dess namn är detta förmodligen det mest uppenbara alternativet för att ersätta NULL-värden i MySQL. Denna funktion är i princip motsvarigheten till ISNULL()
i SQL Server.
IFNULL()
funktionen låter dig ange två argument. Det första argumentet returneras endast om det inte är NULL. Om det är NULL, returneras det andra argumentet istället.
Här är ett exempel på hur du använder IFNULL()
mot vår exempeldatauppsättning:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Resultat:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Här ersatte vi helt enkelt NULL-värden med N/A
.
COALESCE()-funktionen
Denna funktion liknar IFNULL()
funktion, men något annorlunda. Den här funktionen följer ANSI SQL standarden och den är allmänt distribuerad över olika RDBMS:er .
Så det fungerar är att du ger så många argument som du behöver. COALESCE()
kommer då att returnera den första icke-NULL
värde i listan, eller NULL
om det inte finns några icke-NULL
värden.
Så här:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Resultat:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Så vi får exakt samma resultat som tidigare.
Skillnaden med den här funktionen är dock att du som nämnt kan tillhandahålla en lista med argument. COALESCE()
funktionen tar det som är det första icke-NULL-värdet.
Så till exempel kan vi lägga till NULL
som första argument och placera None
före N/A
och se vad som händer:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Resultat:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Den hoppade över den första NULL
som förväntat hoppade den över alla NULL-värden i TaskCode
kolumn innan du väljer None
. N/A
värde användes inte i det här fallet eftersom None
kom först och det är ett icke-NULL-värde.
IF()-funktionen kombinerad med IS NULL/IS NOT NULL
IS NULL
och IS NOT NULL
operatorer låter dig testa för NULL-värden och presentera ett annat värde beroende på resultatet.
Vi kan använda dessa operatorer i IF()
funktion, så att icke-NULL-värden returneras, och NULL-värden ersätts med ett värde som vi väljer.
Exempel:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Resultat:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Så samma resultat som med IFNULL()
och COALESCE()
funktioner.
Och naturligtvis kan vi byta IS NOT NULL
med IS NULL
. Om vi gör det, skulle vi behöva byta ut de efterföljande argumenten också:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
CASE-uttrycket kombinerat med IS NULL/IS NOT NULL
Ett annat sätt att göra det är att använda CASE
uttryck:
SELECT CASE WHEN TaskCode IS NOT NULL THEN TaskCode ELSE 'N/A' END AS Result FROM Tasks;
Resultat:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Som med föregående exempel kan detta skrivas om till att använda IS NULL
istället för IS NOT NULL
:
SELECT CASE WHEN TaskCode IS NULL THEN 'N/A' ELSE TaskCode END AS Result FROM Tasks;