Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-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)