sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo reemplazar NULL con otro valor en SQL Server – ISNULL()

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.