NULLIF (Transact-SQL)
Zwraca wartość null , jeśli dwa wyrażenia określone są równe.
Składnia
NULLIF ( expression , expression )
Zwracane typy
Zwraca wartość tego samego typu co pierwszy expression.
NULLIF zwraca pierwszy expression Jeśli dwa wyrażenia są równe.Jeśli wyrażenia są równe, NULLIF zwraca wartość null typu pierwszy expression.
Uwagi
NULLIF jest równoznaczne z wyszukiwanych sprawy do wyrażenie w którym dwa wyrażenia są równe i wynikowe wyrażenie ma wartość NULL.
Firma Microsoft zaleca, aby nie używać czas— zależne od funkcji, takich jak RAND(), w NULLIF funkcja.Może to spowodować funkcja evaluted dwa razy oraz zwracać różne wyniki z dwóch wywołania.
Przykłady
A.Zwracanie kwoty budżetu, które nie uległy zmianie
Poniższy przykład tworzy budgets tabela , aby pokazać działu (dept) bieżącego budżetu (current_year) i jej budżetu poprzedniego (previous_year).Dla bieżącego roku NULL jest używana dla działów z budżetów, które nie uległy zmianie z poprzedniego roku i 0 jest używana dla budżetów, które nie zostały ustalone.Aby dowiedzieć się średnią tylko tych departamentów, które odbierają budżetu i zawierają wartości budżetu w roku poprzednim (za pomocą previous_year wartości, gdzie current_year jest NULL), połączyć NULLIF i COALESCE funkcji.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.budgets','U') IS NOT NULL
DROP TABLE budgets;
GO
SET NOCOUNT ON;
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ównanie NULLIF i sprawy
Aby pokazać podobieństwa między NULLIF i CASE, wypróbuj następujące kwerendy czy wartości w MakeFlag i FinishedGoodsFlag kolumny są takie same.W pierwszej kwerendzie użyto NULLIF.Wykorzystuje drugą kwerendę CASE wyrażenie.
USE AdventureWorks2008R2;
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
Zobacz także