In MariaDB, il COALESCE()
l'operatore restituisce il primo valore non NULL nell'elenco o NULL se non sono presenti valori non NULL.
Sintassi
La sintassi è questa:
COALESCE(value,...)
Esempio
Ecco un semplice esempio da dimostrare:
SELECT COALESCE(null, 'Red', 'Black');
Risultato:
Red
In questo caso, Red
era il primo valore non NULL, quindi COALESCE()
restituito quel valore.
Black
era anche non NULL, ma veniva dopo Red
e quindi non è stato restituito.
Esempio di database
Supponiamo di eseguire la seguente query:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
E otteniamo il seguente risultato:
+---------+---------------+ | 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 | +---------+---------------+
Possiamo vedere che le ultime due righe hanno valori NULL nella colonna DOB.
Se volessimo sostituire NULL
con un altro valore, potremmo modificare la query come segue:
SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Risultato:
+---------+---------------+ | 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 | +---------+---------------+
Espressioni
COALESCE()
restituisce il valore corrente della prima espressione che inizialmente non restituisce NULL
. Pertanto, se passiamo un'espressione come questa:
SELECT COALESCE( null, 5 * 2 );
Otteniamo questo:
10
Quando tutti i valori sono NULL
Se tutti i valori sono NULL
, COALESCE()
restituisce NULL
:
SELECT COALESCE( null, null );
Risultato:
NULL
COALESCE()
rispetto a IFNULL()
Se utilizzato con due valori, COALESCE()
funziona come IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Risultato:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Conteggio argomenti non valido
Usando COALESCE()
senza alcun argomento genera un errore:
SELECT COALESCE();
Risultato:
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