No SQLite, o
coalesce()
A função retorna uma cópia de seu primeiro argumento não NULL ou NULL se todos os argumentos forem NULL. É semelhante ao
ifnull()
função, exceto que coalesce()
aceita mais de dois argumentos (ifnull()
aceita apenas dois argumentos). Sintaxe
A sintaxe fica assim:
coalesce(X,Y,...)
O que isso significa é que você pode fornecer dois ou mais argumentos. A função então retornará o primeiro que não for NULL.
Exemplo
Aqui está um exemplo para demonstrar.
SELECT coalesce(NULL,1);
Resultado:
1
Aqui eu forneci dois argumentos e
coalesce()
retornou o primeiro valor não NULL, que neste caso é 1 . Mais exemplos
Aqui estão mais variações para demonstrar como
coalesce()
trata de cada 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);
Resultado:
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) =
Então é muito direto. Ele simplesmente retorna o primeiro argumento que não é NULL, independentemente de quantos argumentos são fornecidos.
Observe também que, se todos os argumentos forem NULL, ele retornará NULL.
Exemplo de banco de dados
Aqui está um exemplo de uso do
coalesce()
função em uma consulta de banco de dados. .mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Resultado:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Aqui está o que parece sem usar o
coalesce()
função:.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Resultado:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Então o
coalesce()
pode ser útil para retornar uma string significativa em vez de NULL. Com três argumentos
Aqui está um exemplo de adição de um terceiro argumento. Isso nos permite percorrer várias opções antes de chegar a NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Resultado:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555