In SQLite, de coalesce()
functie retourneert een kopie van zijn eerste niet-NULL-argument, of NULL als alle argumenten NULL zijn.
Het is vergelijkbaar met de ifnull()
functie, behalve dat coalesce()
accepteert meer dan twee argumenten (ifnull()
accepteert slechts twee argumenten).
Syntaxis
De syntaxis gaat als volgt:
coalesce(X,Y,...)
Dit betekent dat je twee of meer argumenten kunt geven. De functie retourneert dan de eerste die niet NULL is.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SELECT coalesce(NULL,1);
Resultaat:
1
Hier heb ik twee argumenten gegeven en coalesce()
heeft de eerste niet-NULL-waarde geretourneerd, in dit geval 1 .
Meer voorbeelden
Hier zijn meer variaties om te laten zien hoe coalesce()
behandelt elke zaak.
.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);
Resultaat:
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) =
Het is dus heel eenvoudig. Het retourneert gewoon het eerste argument dat niet NULL is, ongeacht hoeveel argumenten er zijn opgegeven.
Merk ook op dat als alle argumenten NULL zijn, het NULL teruggeeft.
Databasevoorbeeld
Hier is een voorbeeld van het gebruik van de coalesce()
functie in een databasequery.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Resultaat:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Zo ziet het eruit zonder de coalesce()
functie:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Resultaat:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Dus de coalesce()
functie kan handig zijn om een betekenisvolle string terug te geven in plaats van NULL.
Met drie argumenten
Hier is een voorbeeld van het toevoegen van een derde argument. Hierdoor kunnen we meerdere opties doorlopen voordat we bij NULL komen.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Resultaat:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555