In SQLite, il coalesce()
La funzione restituisce una copia del suo primo argomento non NULL o NULL se tutti gli argomenti sono NULL.
È simile a ifnull()
funzione, tranne che coalesce()
accetta più di due argomenti (ifnull()
accetta solo due argomenti).
Sintassi
La sintassi è questa:
coalesce(X,Y,...)
Ciò significa che puoi fornire due o più argomenti. La funzione restituirà quindi il primo che non è NULL.
Esempio
Ecco un esempio da dimostrare.
SELECT coalesce(NULL,1);
Risultato:
1
Qui ho fornito due argomenti e coalesce()
ha restituito il primo valore non NULL, che in questo caso è 1 .
Altri esempi
Ecco altre varianti per dimostrare come coalesce()
gestisce ogni caso.
.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);
Risultato:
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) =
Quindi è molto semplice. Restituisce semplicemente il primo argomento che non è NULL, indipendentemente dal numero di argomenti forniti.
Nota inoltre che se tutti gli argomenti sono NULL, restituisce NULL.
Esempio di database
Ecco un esempio di utilizzo di coalesce()
funzione in una query del database.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Risultato:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Ecco come appare senza usare coalesce()
funzione:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Risultato:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Quindi coalesce()
può essere utile per restituire una stringa significativa invece di NULL.
Con tre argomenti
Ecco un esempio di aggiunta di un terzo argomento. Questo ci consente di eseguire più opzioni prima di arrivare a NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Risultato:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555