Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como substituir NULL por outro valor no SQL Server – ISNULL()


Ao consultar um banco de dados SQL Server, pode haver momentos em que você não deseja que valores nulos sejam retornados em seu conjunto de resultados. E pode haver momentos em que você quer que eles sejam devolvidos. Mas também pode haver momentos em que você deseja que eles sejam devolvidos, mas com um valor diferente.

É isso que o ISNULL() função é para.

ISNULL() é uma função T-SQL que permite substituir NULL com um valor especificado de sua escolha.


Exemplo


Aqui está uma consulta básica que retorna um pequeno conjunto de resultados:
SELECT TaskCode AS Result
FROM Tasks;

Resultado:
Result
------
cat123
null  
null  
pnt456
rof789
null  

Podemos ver que existem três linhas que contêm valores nulos.

Se não quisermos que os valores nulos apareçam como tal, podemos usar ISNULL() para substituir null com um valor diferente.

Assim:
SELECT ISNULL(TaskCode, 'N/A') AS Result 
FROM Tasks;

Resultado:
Result
------
cat123
N/A   
N/A   
pnt456
rof789
N/A   

Também poderíamos substituí-lo pela string vazia:
SELECT ISNULL(TaskCode, '') AS Result 
FROM Tasks;

Resultado:
Result
------
cat123
      
      
pnt456
rof789
        

Observe que ISNULL() requer que o segundo argumento seja de um tipo que possa ser convertido implicitamente no tipo de dados do primeiro argumento. Isso porque ele retorna o resultado usando o tipo de dados do primeiro argumento.

Evitando que linhas nulas desapareçam


Existem algumas funções T-SQL em que os valores nulos são eliminados do conjunto de resultados. Nesses casos, valores nulos não serão retornados.

Embora isso possa ser um resultado desejável em alguns casos, em outros casos pode ser desastroso, dependendo do que você precisa fazer com os dados depois de devolvidos.

Um exemplo de tal função é STRING_AGG() . Esta função permite retornar o conjunto de resultados como uma lista delimitada. No entanto, também elimina valores nulos do conjunto de resultados. Portanto, se usarmos essa função com os dados de exemplo acima, teremos três resultados em vez de seis:
SELECT STRING_AGG(TaskCode, ', ') AS Result 
FROM Tasks;

Resultado:
Result                
----------------------
cat123, pnt456, rof789

Portanto, as três linhas contendo valores nulos não são retornadas.

Em muitos casos, esse é um resultado perfeito, pois nosso conjunto de resultados não está cheio de valores nulos. No entanto, isso também pode causar problemas, dependendo do uso dos dados.

Portanto, se quisermos manter as linhas com valores nulos, podemos usar ISNULL() para substituir os valores nulos por outro valor:
SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

Resultado:
Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

A função COALESCE()


O ISNULL() A função funciona de maneira semelhante ao COALESCE() função. Assim, poderíamos substituir o código acima por este:
SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result 
FROM Tasks;

E obter o mesmo resultado:
Result                                        
-------------------------------------
cat123, N/A, N/A, pnt456, rof789, N/A

No entanto, existem algumas diferenças na forma como as duas funções se comportam. Para mais informações sobre as diferenças, aqui está uma comparação de COALESCE() e ISNULL() no site da Microsoft.