Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Returnerar ett null-värde om de två angivna uttrycken är lika med. Returnerar till exempel SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; NULL för den första kolumnen (4 och 4) eftersom de två indatavärdena är desamma. Den andra kolumnen returnerar det första värdet (5) eftersom de två indatavärdena är olika.
Transact-SQL syntaxkonventioner
Syntax
NULLIF ( expression , expression )
Arguments
expression
Är ett giltigt skalärt uttryck.
Return Types
Returnerar samma typ som det första uttrycket.
NULLIF returnerar det första uttrycket om de två uttrycken inte är lika med. Om uttrycken är lika returnerar NULLIF ett null-värde av typen för det första uttrycket.
Remarks
NULLIF motsvarar ett sökt CASE-uttryck där de två uttrycken är lika och det resulterande uttrycket är NULL.
Vi rekommenderar att du inte använder tidsberoende funktioner, till exempel RAND(), i en NULLIF-funktion. Detta kan göra att funktionen utvärderas två gånger och returnerar olika resultat från de två anropen.
Examples
A. Returnerar budgetbelopp som inte har ändrats
I följande exempel skapas en budgets tabell för att visa en avdelning (dept) dess aktuella budget (current_year) och dess tidigare budget (previous_year). För innevarande år NULL används för avdelningar med budgetar som inte har ändrats från föregående år och 0 används för budgetar som ännu inte har fastställts. Om du vill ta reda på genomsnittet av endast de avdelningar som tar emot en budget och inkludera budgetvärdet från föregående år (använd previous_year värdet, där current_year är NULL), kombinerar du NULLIF funktionerna och 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
Här är resultatet.
Average Budget
--------------
212500.000000
(1 row(s) affected)
B. Jämföra NULLIF och CASE
För att visa likheten mellan NULLIF och CASEutvärderar följande frågor om värdena i kolumnerna MakeFlag och FinishedGoodsFlag är desamma. Den första frågan använder NULLIF. Den andra frågan använder uttrycket CASE .
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: Returnera budgetbelopp som inte innehåller några data
I följande exempel skapas en budgets tabell, data läses in och används NULLIF för att returnera en null om current_year är null eller innehåller samma data som 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;
Här är resultatet.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
See Also
CASE (Transact-SQL)
decimal och numerisk (Transact-SQL)
System Functions (Transact-SQL)