I SQLite, coalesce()
funktion returnerar en kopia av dess första icke-NULL-argument, eller NULL om alla argument är NULL.
Det liknar ifnull()
funktion, förutom att coalesce()
accepterar mer än två argument (ifnull()
accepterar bara två argument).
Syntax
Syntaxen ser ut så här:
coalesce(X,Y,...)
Vad detta betyder är att du kan ge två eller flera argument. Funktionen kommer då att returnera den första som inte är NULL.
Exempel
Här är ett exempel att visa.
SELECT coalesce(NULL,1);
Resultat:
1
Här gav jag två argument och coalesce()
returnerade det första icke-NULL-värdet, vilket i det här fallet är 1 .
Fler exempel
Här är fler varianter för att visa hur coalesce()
hanterar varje ärende.
.mode line
SELECT
coalesce(NULL,NULL,1,2,3),
coalesce(1,NULL,2,3),
coalesce(NULL,3,2,1),
coalesce(1,2,3,NULL),
coalesce(NULL,NULL);
Resultat:
coalesce(NULL,NULL,1,2,3) = 1 coalesce(1,NULL,2,3) = 1 coalesce(NULL,3,2,1) = 3 coalesce(1,2,3,NULL) = 1 coalesce(NULL,NULL) =
Så det är väldigt enkelt. Det returnerar helt enkelt det första argumentet som inte är NULL, oavsett hur många argument som tillhandahålls.
Lägg också märke till att om alla argument är NULL, så returnerar det NULL.
Databasexempel
Här är ett exempel på hur du använder coalesce()
funktion i en databasfråga.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Så här ser det ut utan att använda coalesce()
funktion:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Så coalesce()
funktion kan vara användbar för att returnera en meningsfull sträng istället för NULL.
Med tre argument
Här är ett exempel på att lägga till ett tredje argument. Detta gör att vi kan gå igenom flera alternativ innan vi anländer till NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555