I SQLite er coalesce()
funktion returnerer en kopi af dets første ikke-NULL-argument eller NULL, hvis alle argumenter er NULL.
Det ligner ifnull()
funktion, bortset fra at coalesce()
accepterer mere end to argumenter (ifnull()
accepterer kun to argumenter).
Syntaks
Syntaksen ser sådan ud:
coalesce(X,Y,...)
Det betyder, at du kan give to eller flere argumenter. Funktionen vil derefter returnere den første, der ikke er NULL.
Eksempel
Her er et eksempel til at demonstrere.
SELECT coalesce(NULL,1);
Resultat:
1
Her har jeg givet to argumenter og coalesce()
returnerede den første ikke-NULL-værdi, som i dette tilfælde er 1 .
Flere eksempler
Her er flere variationer for at demonstrere, hvordan coalesce()
håndterer hver enkelt sag.
.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:
Så det er meget ligetil. Det returnerer simpelthen det første argument, der ikke er NULL, uanset hvor mange argumenter der er angivet.
Bemærk også, at hvis alle argumenter er NULL, så returnerer det NULL.
Databaseeksempel
Her er et eksempel på brug af coalesce()
funktion i en databaseforespørgsel.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax ---------- --------------------1 +55 (12) 39232 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Sådan ser det ud uden at bruge coalesce()
funktion:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax ---------- ------------------1 +55 (12) 3923-55662 3 4 5 +420 2 4172 5555
Så coalesce()
funktion kan være nyttig til at returnere en meningsfuld streng i stedet for NULL.
Med tre argumenter
Her er et eksempel på tilføjelse af et tredje argument. Dette giver os mulighed for at gennemgå flere muligheder, før vi ankommer til NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Resultat:
CustomerId Fax/E-mail ---------- ----------------------1 +55 (12) 3923-5566 2 eksempel @sqldat.com 3 [email protected] 4 [email protected] 5 +420 2 4172 5555