Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Zwraca wartość null, jeśli dwa określone wyrażenia są równe. Na przykład SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; zwraca wartość NULL dla pierwszej kolumny (4 i 4), ponieważ dwie wartości wejściowe są takie same. Druga kolumna zwraca pierwszą wartość (5), ponieważ dwie wartości wejściowe są różne.
Transact-SQL konwencje składni
Syntax
NULLIF ( expression , expression )
Arguments
expression
Czy dowolne prawidłowe wyrażenie skalarne.
Typy zwracane
Zwraca ten sam typ co pierwsze wyrażenie.
Funkcja NULLIF zwraca pierwsze wyrażenie , jeśli dwa wyrażenia nie są równe. Jeśli wyrażenia są równe, funkcja NULLIF zwraca wartość null typu pierwszego wyrażenia.
Remarks
Wartość NULLIF jest równoważna wyszukiwanemu wyrażeniu CASE, w którym dwa wyrażenia są równe, a wynikowe wyrażenie ma wartość NULL.
Zalecamy, aby nie używać funkcji zależnych od czasu, takich jak RAND(), w funkcji NULLIF. Może to spowodować dwukrotne obliczenie funkcji i zwrócenie różnych wyników z dwóch wywołań.
Examples
A. Zwracanie kwot budżetu, które nie zostały zmienione
Poniższy przykład tworzy tabelę budgets w celu wyświetlenia działu () jego bieżącego budżetu (deptcurrent_year) i poprzedniego budżetu (previous_year). W bieżącym roku jest używany dla działów z budżetami, które nie uległy zmianie z poprzedniego roku NULL , i 0 jest używane dla budżetów, które nie zostały jeszcze ustalone. Aby dowiedzieć się, czy średnia dotyczy tylko tych działów, które otrzymują budżet, i uwzględnić wartość budżetową z poprzedniego roku (użyj previous_year wartości , gdzie current_year wartość to NULL), połącz NULLIF funkcje i 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
Oto zestaw wyników.
Average Budget
--------------
212500.000000
(1 row(s) affected)
B. Porównywanie wartości NULLIF i CASE
Aby wyświetlić podobieństwo między NULLIF i CASE, następujące zapytania oceniają, czy wartości w MakeFlag kolumnach i FinishedGoodsFlag są takie same. Pierwsze zapytanie używa elementu NULLIF. Drugie zapytanie używa CASE wyrażenia .
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: Zwracanie kwot budżetu, które nie zawierają żadnych danych
Poniższy przykład tworzy tabelę budgets , ładuje dane i używa wartości NULLIF null, jeśli current_year ma wartość null lub zawiera te same dane co 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;
Oto zestaw wyników.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
Zobacz też
SPRAWA (Transact-SQL)
dziesiętne i liczbowe (Transact-SQL)
Funkcje systemowe (Transact-SQL)