En MySQL, el COALESCE()
operador devuelve el primer valor no NULL en la lista, o NULL si no hay valores no NULL.
Sintaxis
La sintaxis es así:
COALESCE(value,...)
Ejemplo
Aquí hay un ejemplo simple para demostrarlo:
SELECT COALESCE(null, 'Fish', 'Rabbit');
Resultado:
Fish
En este caso, Fish
fue el primer valor no NULL, por lo que COALESCE()
devolvió ese valor.
Rabbit
también era un valor no NULL, pero venía después de Fish
por lo que no fue devuelto.
Cuando todos los valores son NULL
Si todos los valores son NULL
, COALESCE()
devuelve NULL
:
SELECT COALESCE( null, null );
Resultado:
NULL
Expresiones
COALESCE()
devuelve el valor actual de la primera expresión que inicialmente no se evalúa como NULL
. Por lo tanto, si pasamos una expresión como esta:
SELECT COALESCE( null, 2 * 10 );
Obtenemos esto:
20
Ejemplo de base de datos
Supongamos que ejecutamos la siguiente consulta:
SELECT
PetName,
PetType
FROM Pets;
Y obtenemos el siguiente resultado:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Podemos ver que dos filas tienen valores NULL en la columna DOB.
Si quisiéramos reemplazar NULL
con otro valor, podríamos cambiar la consulta de la siguiente manera:
SELECT
PetName,
COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;
Resultado:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
En este caso reemplazamos todos los valores NULL con la cadena Unknown
.
Sin embargo, no es necesario que sea una cadena. Aquí hay otro ejemplo que reemplaza los valores NULL con un número entero:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Resultado:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Recuento de argumentos no válidos
Usando COALESCE()
sin ningún argumento da como resultado un error:
SELECT COALESCE();
Resultado:
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