Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí hodnotu null, pokud jsou dva zadané výrazy stejné. Například SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; vrátí hodnotu NULL pro první sloupec (4 a 4), protože dvě vstupní hodnoty jsou stejné. Druhý sloupec vrátí první hodnotu (5), protože dvě vstupní hodnoty se liší.
Syntax
NULLIF ( expression , expression )
Arguments
expression
Je libovolný platný skalární výraz.
Návratové typy
Vrátí stejný typ jako první výraz.
Funkce NULLIF vrátí první výraz , pokud se dva výrazy nerovnají. Pokud jsou výrazy stejné, vrátí funkce NULLIF hodnotu null typu prvního výrazu.
Remarks
NULLIF je ekvivalentem hledaného výrazu CASE, ve kterém jsou dva výrazy stejné a výsledný výraz je NULL.
Doporučujeme, abyste v rámci funkce NULLIF nepoužíli funkce závislé na čase, například RAND(). To může způsobit, že se funkce vyhodnotí dvakrát a vrátí odlišné výsledky ze dvou vyvolání.
Examples
A. Vrácení rozpočtových částek, které se nezměnily
Následující příklad vytvoří budgets tabulku, která zobrazí oddělení (dept) aktuální rozpočet (current_year) a předchozí rozpočet (previous_year). Pro aktuální rok NULL se používá pro oddělení s rozpočty, které se nezměnily z předchozího roku, a 0 používá se pro rozpočty, které ještě nebyly určeny. Chcete-li zjistit průměr pouze těch oddělení, která obdrží rozpočet, a zahrnout hodnotu rozpočtu z předchozího roku (použijte previous_year hodnotu, kde current_year je NULL), kombinujte NULLIF funkce a COALESCE funkce.
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
Tady je soubor výsledků.
Average Budget
--------------
212500.000000
(1 row(s) affected)
B. Porovnání HODNOT NULLIF a CASE
Aby se zobrazila podobnost mezi NULLIF a CASE, následující dotazy vyhodnocují, jestli jsou hodnoty ve MakeFlagFinishedGoodsFlag sloupcích stejné. První dotaz používá NULLIF. Druhý dotaz používá CASE výraz.
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: Vrácení rozpočtových částek, které neobsahují žádná data
Následující příklad vytvoří budgets tabulku, načte data a používá NULLIF k vrácení hodnoty null, pokud current_year je null nebo obsahuje stejná data jako 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;
Tady je soubor výsledků.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
Viz také
PŘÍPAD (Transact-SQL)
desetinné a číselné (Transact-SQL)
systémové funkce (Transact-SQL)