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
CASEexpresió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;