En SQLite, coalesce()
La función devuelve una copia de su primer argumento que no es NULL, o NULL si todos los argumentos son NULL.
Es similar al ifnull()
función, excepto que coalesce()
acepta más de dos argumentos (ifnull()
solo acepta dos argumentos).
Sintaxis
La sintaxis es así:
coalesce(X,Y,...)
Lo que esto significa es que puede proporcionar dos o más argumentos. La función devolverá el primero que no sea NULL.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SELECT coalesce(NULL,1);
Resultado:
1
Aquí proporcioné dos argumentos y coalesce()
devolvió el primer valor no NULL, que en este caso es 1 .
Más ejemplos
Aquí hay más variaciones para demostrar cómo coalesce()
maneja 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) =
Así que es muy sencillo. Simplemente devuelve el primer argumento que no es NULL, independientemente de cuántos argumentos se proporcionen.
También observe que si todos los argumentos son NULL, entonces devuelve NULL.
Ejemplo de base de datos
Aquí hay un ejemplo del uso de coalesce()
función en una consulta de base de datos.
.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
Así es como se ve sin usar coalesce()
función:
.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
Así que coalesce()
La función puede ser útil para devolver una cadena significativa en lugar de NULL.
Con tres argumentos
Aquí hay un ejemplo de cómo agregar un tercer argumento. Esto nos permite ejecutar múltiples opciones antes de llegar 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