No SQL Server, o
COALESCE() expressão retorna seu primeiro argumento não nulo. A forma como funciona é, passamos uma lista de argumentos para a expressão, ela avalia os argumentos em ordem e retorna o valor atual da primeira expressão que inicialmente não é avaliada como
NULL . Sintaxe
A sintaxe fica assim:
COALESCE ( expression [ ,...n ] ) Exemplo
Aqui está um exemplo simples para demonstrar:
SELECT COALESCE(null, 'Cat', 'Dog'); Resultado:
Cat
Neste caso,
Cat foi o primeiro argumento não NULL, então COALESCE() retornou esse valor. Expressões
Como mencionado,
COALESCE() retorna o valor atual da primeira expressão que inicialmente não é avaliada como NULL . Portanto, se passarmos uma expressão como esta:SELECT COALESCE( null, 2 * 3 ); Obtemos isso:
6
A função retorna o tipo de dados da expressão com a precedência de tipo de dados mais alta. Se todas as expressões forem não anuláveis, o resultado será digitado como não anulável.
Quando todos os argumentos são NULL
Se todos os argumentos forem
NULL , COALESCE() retorna NULL . No entanto, pelo menos um dos valores nulos deve ser um NULL digitado , caso contrário, ocorrerá um erro. Em outras palavras, eles não podem ser todos
NULL constante:SELECT COALESCE( null, null ); Obtemos isso:
Msg 4127, Level 16, State 1, Line 1 At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
Neste caso, todos os argumentos eram
NULL constante e, portanto, um erro foi retornado. Abaixo está um exemplo de banco de dados para demonstrar um cenário em que
COALESCE() retorna NULL quando todos os argumentos são NULL . Suponha que executemos a seguinte consulta:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Resultado:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Ambas as colunas contêm
NULL valores. Então, se passarmos ambas as colunas para
COALESCE() , obtemos um resultado de NULL :SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Resultado:
NULL
O mesmo acontece se substituirmos uma das colunas pelo
NULL constante:SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; Resultado:
NULL
Portanto, é somente quando todos argumentos são os
NULL constante que obtemos um erro. Substituir NULL Resultados com um valor conhecido
Podemos incluir um valor conhecido como o último argumento para substituir qualquer resultado NULL por esse valor conhecido.
Por exemplo, a consulta a seguir retorna
NULL :SELECT SUM( UnitPrice )
FROM Sales.SpecialDeals; Resultado:
NULL
Nesse caso, o
UnitPrice coluna contém valores NULL em todas as linhas e, portanto, o resultado foi NULL . Podemos usar
COALESCE() assim:SELECT COALESCE( SUM( UnitPrice ), 0 )
FROM Sales.SpecialDeals; Resultado:
0.00
Agora, o resultado NULL é substituído por um valor conhecido (zero).
COALESCE() vs CASE
O
COALESCE() expressão é na verdade um atalho sintático para o CASE expressão. Quando usamos o COALESCE() expressão, o otimizador de consulta a reescreve como um CASE expressão. Quando executo a seguinte declaração:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1; O otimizador de consulta o reescreve para o seguinte:
CASE
WHEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] IS NOT NULL THEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID]
ELSE [WideWorldImporters].[Sales].[SpecialDeals].[CustomerCategoryID]
END COALESCE() vs ISNULL()
De certa forma, o
COALESCE() expressão é semelhante a ISNULL() função. Mas há diferenças. Em particular:ISNULL()é uma função e é avaliada apenas uma vez.COALESCE()por outro lado, é uma expressão e pode ser avaliada várias vezes.- A determinação do tipo de dados da expressão resultante é diferente.
ISNULLusa o tipo de dados do primeiro parâmetro,COALESCEsegue oCASEregras de expressão e retorna o tipo de dados de valor com a precedência mais alta. - A NULLability da expressão de resultado é diferente para
ISNULLeCOALESCE. OISNULLo valor de retorno é sempre considerado NOT NULLable (assumindo que o valor de retorno é não anulável). Por outro lado,COALESCEcom parâmetros não nulos é consideradoNULL. - Validações para
ISNULLeCOALESCEtambém são diferentes. Por exemplo, umNULLvalor paraISNULLé convertido paraintembora paraCOALESCE, você deve fornecer um tipo de dados. ISNULLleva apenas dois parâmetros. Por outro ladoCOALESCErecebe um número variável de parâmetros.
Mais informações
Consulte a documentação da Microsoft para obter mais detalhes e exemplos mais complexos.