V MariaDB, COALESCE()
Operátor vrátí první hodnotu v seznamu, která není NULL, nebo NULL, pokud neexistují žádné jiné hodnoty než NULL.
Syntaxe
Syntaxe vypadá takto:
COALESCE(value,...)
Příklad
Zde je jednoduchý příklad k demonstraci:
SELECT COALESCE(null, 'Red', 'Black');
Výsledek:
Red
V tomto případě Red
byla první hodnota bez NULL, a tak COALESCE()
vrátil tuto hodnotu.
Black
byl také jiný než NULL, ale přišel po Red
a tak to nebylo vráceno.
Příklad databáze
Předpokládejme, že spustíme následující dotaz:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
A dostaneme následující výsledek:
+---------+---------------+ | 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 | +---------+---------------+
Vidíme, že poslední dva řádky mají ve sloupci DOB hodnoty NULL.
Pokud bychom chtěli nahradit NULL
s jinou hodnotou bychom mohli dotaz změnit následovně:
SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Výsledek:
+---------+---------------+ | 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 | +---------+---------------+
Výrazy
COALESCE()
vrátí aktuální hodnotu prvního výrazu, který se zpočátku nevyhodnotí jako NULL
. Pokud tedy předáme výraz jako tento:
SELECT COALESCE( null, 5 * 2 );
Dostáváme toto:
10
Když jsou všechny hodnoty NULL
Pokud jsou všechny hodnoty NULL
, COALESCE()
vrátí NULL
:
SELECT COALESCE( null, null );
Výsledek:
NULL
COALESCE()
vs IFNULL()
Při použití se dvěma hodnotami COALESCE()
funguje stejně jako IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Výsledek:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Neplatný počet argumentů
Pomocí COALESCE()
bez jakýchkoli argumentů vede k chybě:
SELECT COALESCE();
Výsledek:
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