Udostępnij za pomocą


NULLIF (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Zwraca wartość null, jeśli dwa określone wyrażenia są równe. Na przykład SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; zwraca wartość NULL dla pierwszej kolumny (4 i 4), ponieważ dwie wartości wejściowe są takie same. Druga kolumna zwraca pierwszą wartość (5), ponieważ dwie wartości wejściowe są różne.

Transact-SQL konwencje składni

Syntax

NULLIF ( expression , expression )  

Arguments

expression
Czy dowolne prawidłowe wyrażenie skalarne.

Typy zwracane

Zwraca ten sam typ co pierwsze wyrażenie.

Funkcja NULLIF zwraca pierwsze wyrażenie , jeśli dwa wyrażenia nie są równe. Jeśli wyrażenia są równe, funkcja NULLIF zwraca wartość null typu pierwszego wyrażenia.

Remarks

Wartość NULLIF jest równoważna wyszukiwanemu wyrażeniu CASE, w którym dwa wyrażenia są równe, a wynikowe wyrażenie ma wartość NULL.

Zalecamy, aby nie używać funkcji zależnych od czasu, takich jak RAND(), w funkcji NULLIF. Może to spowodować dwukrotne obliczenie funkcji i zwrócenie różnych wyników z dwóch wywołań.

Examples

A. Zwracanie kwot budżetu, które nie zostały zmienione

Poniższy przykład tworzy tabelę budgets w celu wyświetlenia działu () jego bieżącego budżetu (deptcurrent_year) i poprzedniego budżetu (previous_year). W bieżącym roku jest używany dla działów z budżetami, które nie uległy zmianie z poprzedniego roku NULL , i 0 jest używane dla budżetów, które nie zostały jeszcze ustalone. Aby dowiedzieć się, czy średnia dotyczy tylko tych działów, które otrzymują budżet, i uwzględnić wartość budżetową z poprzedniego roku (użyj previous_year wartości , gdzie current_year wartość to NULL), połącz NULLIF funkcje i 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  

Oto zestaw wyników.

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

B. Porównywanie wartości NULLIF i CASE

Aby wyświetlić podobieństwo między NULLIF i CASE, następujące zapytania oceniają, czy wartości w MakeFlag kolumnach i FinishedGoodsFlag są takie same. Pierwsze zapytanie używa elementu NULLIF. Drugie zapytanie używa CASE wyrażenia .

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: Zwracanie kwot budżetu, które nie zawierają żadnych danych

Poniższy przykład tworzy tabelę budgets , ładuje dane i używa wartości NULLIF null, jeśli current_year ma wartość null lub zawiera te same dane co 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;  

Oto zestaw wyników.

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

Zobacz też

SPRAWA (Transact-SQL)
dziesiętne i liczbowe (Transact-SQL)
Funkcje systemowe (Transact-SQL)