Partilhar via


NULLIF (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Retorna um valor nulo se as duas expressões especificadas forem iguais. Por exemplo, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; retorna NULL para a primeira coluna (4 e 4) porque os dois valores de entrada são os mesmos. A segunda coluna retorna o primeiro valor (5) porque os dois valores de entrada são diferentes.

Transact-SQL convenções de sintaxe

Syntax

NULLIF ( expression , expression )  

Arguments

expression
É qualquer expressão escalar válida.

Tipos de devolução

Retorna o mesmo tipo da primeira expressão.

NULLIF retorna a primeira expressão se as duas expressões não forem iguais. Se as expressões forem iguais, NULLIF retornará um valor nulo do tipo da primeira expressão.

Remarks

NULLIF é equivalente a uma expressão CASE pesquisada na qual as duas expressões são iguais e a expressão resultante é NULL.

Recomendamos que você não use funções dependentes do tempo, como RAND(), dentro de uma função NULLIF. Isso pode fazer com que a função seja avaliada duas vezes e retorne resultados diferentes das duas invocações.

Examples

A. Devolvendo valores de orçamento que não foram alterados

O exemplo a seguir cria uma budgets tabela para mostrar a um departamento (dept) seu orçamento atual (current_year) e seu orçamento anterior (previous_year). Para o ano em curso, NULL é utilizado para departamentos com orçamentos que não foram alterados em relação ao ano anterior e 0 é utilizado para orçamentos que ainda não foram determinados. Para descobrir a média de apenas os departamentos que recebem um orçamento e para incluir o valor do orçamento do ano anterior (use o previous_year valor, onde o current_year é NULL), combine as NULLIF funções e COALESCE .

CREATE TABLE dbo.budgets  
(  
   dept            TINYINT   IDENTITY,  
   current_year    DECIMAL   NULL,  
   previous_year   DECIMAL   NULL  
);  
INSERT budgets VALUES(100000, 150000);  
INSERT budgets VALUES(NULL, 300000);  
INSERT budgets VALUES(0, 100000);  
INSERT budgets VALUES(NULL, 150000);  
INSERT budgets VALUES(300000, 250000);  
GO    
SET NOCOUNT OFF;  
SELECT AVG(NULLIF(COALESCE(current_year,  
   previous_year), 0.00)) AS [Average Budget]  
FROM budgets;  
GO  

Aqui está o conjunto de resultados.

Average Budget  
--------------  
212500.000000  
(1 row(s) affected)

B. Comparando NULLIF e CASE

Para mostrar a semelhança entre NULLIF e CASE, as consultas a seguir avaliam se os valores nas MakeFlag colunas e FinishedGoodsFlag são os mesmos. A primeira consulta usa NULLIF. A segunda consulta usa a CASE expressão.

USE AdventureWorks2022;  
GO  
SELECT ProductID, MakeFlag, FinishedGoodsFlag,   
   NULLIF(MakeFlag,FinishedGoodsFlag) AS [Null if Equal]  
FROM Production.Product  
WHERE ProductID < 10;  
GO  
  
SELECT ProductID, MakeFlag, FinishedGoodsFlag, [Null if Equal] =  
   CASE  
       WHEN MakeFlag = FinishedGoodsFlag THEN NULL  
       ELSE MakeFlag  
   END  
FROM Production.Product  
WHERE ProductID < 10;  
GO  

C: Devolvendo montantes orçamentais que não contêm dados

O exemplo a seguir cria uma budgets tabela, carrega dados e usa NULLIF para retornar um null se current_year for null ou contiver os mesmos dados que previous_year.


Copy
CREATE TABLE budgets (  
   dept           TINYINT,  
   current_year   DECIMAL(10,2),  
   previous_year  DECIMAL(10,2)  
);  
  
INSERT INTO budgets VALUES(1, 100000, 150000);  
INSERT INTO budgets VALUES(2, NULL, 300000);  
INSERT INTO budgets VALUES(3, 0, 100000);  
INSERT INTO budgets VALUES(4, NULL, 150000);  
INSERT INTO budgets VALUES(5, 300000, 300000);  
  
SELECT dept, NULLIF(current_year,  
   previous_year) AS LastBudget  
FROM budgets;  

Aqui está o conjunto de resultados.

dept   LastBudget  
----   -----------  
1      100000.00  
2      null 
3      0.00  
4      null  
5      null

Ver também

CASO (Transact-SQL)
decimais e numéricos (Transact-SQL)
Funções do sistema (Transact-SQL)