En MySQL, a veces no desea que los valores NULL se devuelvan como NULL
. A veces desea que los valores NULL se devuelvan con un valor diferente, como "N/A", "No aplicable", "Ninguno" o incluso la cadena vacía "".
Afortunadamente, hay varias formas de hacer esto en MySQL.
Aquí hay cuatro:
- El
IFNULL()
función - El
COALESCE()
función - El
IF()
función combinada conIS NULL
(oIS NOT NULL
) operador - El
CASE
expresión combinada conIS NULL
(oIS NOT NULL
) operador
A continuación se muestran ejemplos de estas opciones.
Datos de muestra
Primero, tomemos algunos datos de muestra:
USE Solutions; SELECT TaskCode From Tasks;
Resultado:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Así que tenemos tres valores NULL y tres valores no NULL.
Función IFNULL()
Dado su nombre, esta es probablemente la opción más obvia para reemplazar valores NULL en MySQL. Esta función es básicamente el equivalente de ISNULL()
en SQL Server.
El IFNULL()
función le permite proporcionar dos argumentos. El primer argumento se devuelve solo si no es NULL. Si es NULL, en su lugar se devuelve el segundo argumento.
Aquí hay un ejemplo del uso de IFNULL()
contra nuestro conjunto de datos de muestra:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Aquí, simplemente reemplazamos los valores NULL con N/A
.
Función COALESCE()
Esta función es similar a IFNULL()
función, pero ligeramente diferente. Esta función se adhiere al estándar ANSI SQL y se implementa ampliamente en varios RDBMS.
La forma en que funciona es que proporciona tantos argumentos como necesite. COALESCE()
luego devolverá el primer no NULL
valor en la lista, o NULL
si no hay ningún NULL
valores.
Así:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Entonces obtenemos exactamente el mismo resultado que antes.
Sin embargo, la diferencia con esta función es que, como se mencionó, puede proporcionar una lista de argumentos. El COALESCE()
la función tomará el que sea el primer valor no NULL.
Entonces, por ejemplo, podríamos agregar NULL
como primer argumento y coloque None
antes de N/A
y mira lo que pasa:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Se saltó el primer NULL
como se esperaba, luego omitió cualquier valor NULL en el TaskCode
columna, antes de decidirse por None
. El N/A
el valor no se usó en este caso porque None
vino primero y es un valor no NULL.
La función IF() combinada con IS NULL/IS NOT NULL
El IS NULL
y IS NOT NULL
Los operadores le permiten probar valores NULOS y presentar un valor diferente según el resultado.
Podemos usar estos operadores dentro del IF()
función, de modo que se devuelvan valores no NULL y los valores NULL se reemplacen con un valor de nuestra elección.
Ejemplo:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Así que el mismo resultado que con IFNULL()
y COALESCE()
funciones.
Y, por supuesto, podríamos intercambiar IS NOT NULL
con IS NULL
. Si hacemos eso, también tendríamos que intercambiar los argumentos subsiguientes:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
La expresión CASE combinada con IS NULL/IS NOT NULL
Otra forma de hacerlo es usar el CASE
expresión:
SELECT CASE WHEN TaskCode IS NOT NULL THEN TaskCode ELSE 'N/A' END AS Result FROM Tasks;
Resultado:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Al igual que con el ejemplo anterior, esto podría reescribirse para usar IS NULL
en lugar de IS NOT NULL
:
SELECT CASE WHEN TaskCode IS NULL THEN 'N/A' ELSE TaskCode END AS Result FROM Tasks;