Al consultar una base de datos de SQL Server, puede haber ocasiones en las que no desee que se devuelvan valores nulos en su conjunto de resultados. Y puede haber momentos en los que desee que se los devuelvan. Pero también puede haber momentos en los que desee que se los devuelvan, pero con un valor diferente.
Eso es lo que ISNULL()
la función es para.
ISNULL()
es una función T-SQL que le permite reemplazar NULL
con un valor específico de su elección.
Ejemplo
Aquí hay una consulta básica que devuelve un pequeño conjunto de resultados:
SELECT TaskCode AS Result FROM Tasks;
Resultado:
Result ------ cat123 null null pnt456 rof789 null
Podemos ver que hay tres filas que contienen valores nulos.
Si no quisiéramos que los valores nulos aparecieran como tales, podríamos usar ISNULL()
para reemplazar null
con un valor diferente.
Así:
SELECT ISNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Resultado:
Result ------ cat123 N/A N/A pnt456 rof789 N/A
También podríamos reemplazarlo con la cadena vacía:
SELECT ISNULL(TaskCode, '') AS Result FROM Tasks;
Resultado:
Result ------ cat123 pnt456 rof789
Tenga en cuenta que ISNULL()
requiere que el segundo argumento sea de un tipo que pueda convertirse implícitamente al tipo de datos del primer argumento. Eso es porque devuelve el resultado usando el tipo de datos del primer argumento.
Evitar la desaparición de filas nulas
Hay algunas funciones de T-SQL donde los valores nulos se eliminan del conjunto de resultados. En tales casos, los valores nulos no se devolverán en absoluto.
Si bien esto podría ser un resultado deseable en algunos casos, en otros casos podría ser desastroso, según lo que necesite hacer con los datos una vez que se devuelvan.
Un ejemplo de tal función es STRING_AGG()
. Esta función le permite devolver el conjunto de resultados como una lista delimitada. Sin embargo, también elimina los valores nulos del conjunto de resultados. Entonces, si usamos esta función con los datos de muestra anteriores, terminaríamos con tres resultados en lugar de seis:
SELECT STRING_AGG(TaskCode, ', ') AS Result FROM Tasks;
Resultado:
Result ---------------------- cat123, pnt456, rof789
Por lo tanto, las tres filas que contienen valores nulos no se devuelven.
En muchos casos, este es un resultado perfecto, ya que nuestro conjunto de resultados no está repleto de valores nulos. Sin embargo, esto también podría causar problemas, según el uso que se vaya a dar a los datos.
Por lo tanto, si queremos conservar las filas con valores nulos, podemos usar ISNULL()
para reemplazar los valores nulos con otro valor:
SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Resultado:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
Función COALESCE()
El ISNULL()
La función funciona de manera similar a COALESCE()
función. Así que podríamos reemplazar el código anterior con este:
SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result FROM Tasks;
Y obtener el mismo resultado:
Result ------------------------------------- cat123, N/A, N/A, pnt456, rof789, N/A
Sin embargo, hay algunas diferencias en la forma en que se comportan las dos funciones. Para obtener más información sobre las diferencias, aquí hay una comparación de COALESCE()
y ISNULL()
en el sitio web de Microsoft.