I MariaDB er COALESCE()
operatoren returnerer den første ikke-NULL-værdi på listen, eller NULL, hvis der ikke er nogen ikke-NULL-værdier.
Syntaks
Syntaksen ser sådan ud:
COALESCE(value,...)
Eksempel
Her er et simpelt eksempel til at demonstrere:
SELECT COALESCE(null, 'Red', 'Black');
Resultat:
Red
I dette tilfælde Red
var den første ikke-NULL værdi, og så COALESCE()
returnerede den værdi.
Black
var også ikke-NULL, men det kom efter Red
og så det blev ikke returneret.
Databaseeksempel
Antag, at vi kører følgende forespørgsel:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
Og vi får følgende resultat:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | 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 | +---------+---------------+
Vi kan se, at de sidste to rækker har NULL-værdier i DOB-kolonnen.
Hvis vi ville erstatte NULL
med en anden værdi, kunne vi ændre forespørgslen som følger:
SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Resultat:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | 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 | +---------+---------------+
Udtryk
COALESCE()
returnerer den aktuelle værdi af det første udtryk, der oprindeligt ikke evalueres til NULL
. Derfor, hvis vi sender et udtryk som dette:
SELECT COALESCE( null, 5 * 2 );
Vi får dette:
10
Når alle værdier er NULL
Hvis alle værdier er NULL
, COALESCE()
returnerer NULL
:
SELECT COALESCE( null, null );
Resultat:
NULL
COALESCE()
vs IFNULL()
Når det bruges med to værdier, COALESCE()
virker på samme måde som IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Resultat:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Ugyldigt argumentantal
Brug af COALESCE()
uden nogen argumenter resulterer i en fejl:
SELECT COALESCE();
Resultat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1