In MySQL, 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, 'Fish', 'Rabbit');
Risultato:
Fish
In questo caso, Fish
era il primo valore non NULL, quindi COALESCE()
restituito quel valore.
Rabbit
era anche un valore non NULL, ma veniva dopo Fish
e quindi non è stato restituito.
Quando tutti i valori sono NULL
Se tutti i valori sono NULL
, COALESCE()
restituisce NULL
:
SELECT COALESCE( null, null );
Risultato:
NULL
Espressioni
COALESCE()
restituisce il valore corrente della prima espressione che inizialmente non restituisce NULL
. Pertanto, se passiamo un'espressione come questa:
SELECT COALESCE( null, 2 * 10 );
Otteniamo questo:
20
Esempio di database
Supponiamo di eseguire la seguente query:
SELECT
PetName,
PetType
FROM Pets;
E otteniamo il seguente risultato:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Possiamo vedere che 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(PetType, 'Unknown') AS "PetType"
FROM Pets;
Risultato:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
In questo caso abbiamo sostituito tutti i valori NULL con la stringa Unknown
.
Non è necessario che sia una stringa però. Ecco un altro esempio che sostituisce i valori NULL con un numero intero:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Risultato:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Conteggio argomenti non valido
Usando COALESCE()
senza alcun argomento genera un errore:
SELECT COALESCE();
Risultato:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1