Delen via


NULLIF (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Retourneert een null-waarde als de twee opgegeven expressies gelijk zijn. Retourneert bijvoorbeeld SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; NULL voor de eerste kolom (4 en 4), omdat de twee invoerwaarden hetzelfde zijn. De tweede kolom retourneert de eerste waarde (5) omdat de twee invoerwaarden verschillen.

Transact-SQL syntaxis-conventies

Syntax

NULLIF ( expression , expression )  

Arguments

expression
Is een geldige scalaire expressie.

Return Types

Retourneert hetzelfde type als de eerste expressie.

NULLIF retourneert de eerste expressie als de twee expressies niet gelijk zijn. Als de expressies gelijk zijn, retourneert NULLIF een null-waarde van het type van de eerste expressie.

Remarks

NULLIF is gelijk aan een gezochte CASE-expressie waarin de twee expressies gelijk zijn en de resulterende expressie NULL is.

U wordt aangeraden geen tijdafhankelijke functies, zoals ASELECT(), te gebruiken binnen een null.ALS-functie. Dit kan ertoe leiden dat de functie tweemaal wordt geƫvalueerd en verschillende resultaten van de twee aanroepen retourneert.

Examples

A. Geretourneerde budgetbedragen die niet zijn gewijzigd

In het volgende voorbeeld wordt een budgets tabel gemaakt om een afdeling () het huidige budget (deptcurrent_year) en het vorige budget () weerprevious_year te geven. Voor het huidige jaar NULL worden afdelingen met budgetten gebruikt die niet zijn gewijzigd van het vorige jaar en 0 worden gebruikt voor budgetten die nog niet zijn vastgesteld. Als u het gemiddelde wilt achterhalen van alleen de afdelingen die een budget ontvangen en de budgetwaarde van het vorige jaar wilt opnemen (gebruik de previous_year waarde, waar het isNULL), current_year combineert u de NULLIF en COALESCE functies.

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  

Hier is het resultatenoverzicht.

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

B. NULLIF en CASE vergelijken

Als u de overeenkomst tussen NULLIF en CASEwilt weergeven, evalueren de volgende query's of de waarden in de MakeFlag en FinishedGoodsFlag kolommen hetzelfde zijn. De eerste query maakt gebruik van NULLIF. De tweede query maakt gebruik van de CASE expressie.

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: Retourneert budgetbedragen die geen gegevens bevatten

In het volgende voorbeeld wordt een budgets tabel gemaakt, gegevens geladen en gebruikt NULLIF om een null-waarde te retourneren als current_year null of dezelfde gegevens bevat als 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;  

Hier is het resultatenoverzicht.

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

See Also

CASE (Transact-SQL)
decimaal en numeriek (Transact-SQL)
Systeemfuncties (Transact-SQL)