Megosztás a következőn keresztül:


NULLIF (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Null értéket ad vissza, ha a két megadott kifejezés egyenlő. Például SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; null értéket ad vissza az első oszlophoz (4 és 4), mert a két bemeneti érték megegyezik. A második oszlop az első értéket (5) adja vissza, mert a két bemeneti érték eltérő.

Transact-SQL szintaxis konvenciók

Syntax

NULLIF ( expression , expression )  

Arguments

expression
Érvényes skaláris kifejezés.

Visszatérési típusok

Ugyanazt a típust adja vissza, mint az első kifejezés.

A NULLIF az első kifejezést adja vissza, ha a két kifejezés nem egyenlő. Ha a kifejezések egyenlőek, a NULLIF az első kifejezés típusának null értékét adja vissza.

Remarks

A NULLIF egyenértékű egy olyan keresett CASE kifejezéssel, amelyben a két kifejezés egyenlő, az eredmény pedig NULL.

Azt javasoljuk, hogy ne használjon időfüggő függvényeket, például a RAND() függvényt a NULLIF függvényen belül. Ez azt eredményezheti, hogy a függvényt kétszer kell kiértékelni, és a két meghívástól eltérő eredményt ad vissza.

Examples

A. Nem módosított költségvetési összegek visszaadása

Az alábbi példa egy táblát budgets hoz létre, amely egy részleg () aktuális költségvetését (deptcurrent_year) és korábbi költségvetését (previous_year) jeleníti meg. Az aktuális évre az előző évtől NULL nem módosított költségvetéssel rendelkező részlegek esetében használatos, és 0 olyan költségvetésekhez használatos, amelyek még nem lettek meghatározva. Ha csak azoknak a részlegeknek az átlagát szeretné megtudni, amelyek költségvetést kapnak, és hogy belefoglalják az előző év költségvetési értékét (használja az previous_year értéket, ahol az current_year vanNULL), kombinálja a függvényeket és NULLIF a COALESCE függvényeket.

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  

Itt van az eredmények összessége.

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

B. A NULLIF és a CASE összehasonlítása

A két és NULLIFaz közötti CASE hasonlóság megjelenítéséhez az alábbi lekérdezések kiértékelik, hogy az oszlopok és MakeFlag az FinishedGoodsFlag oszlopok értékei megegyeznek-e. Az első lekérdezés a következőt használja NULLIF: . A második lekérdezés a CASE kifejezést használja.

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: Adatok nélküli költségvetési összegek visszaadása

Az alábbi példa létrehoz egy táblát budgets , betölti az adatokat, és null értéket ad NULLIF vissza, ha current_year null értékű, vagy ugyanazokat az adatokat tartalmazza, mint previous_yeara .


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;  

Itt van az eredmények összessége.

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

Lásd még:

ESET (Transact-SQL)
decimális és numerikus (Transact-SQL)
Rendszerfunkciók (Transact-SQL)