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.