NULLIF (Transact-SQL)
Zwraca wartość null, jeśli dwa wyrażenia określonego są równe.
NULLIF ( expression , expression )
Zwracane typy
Zwraca wartość tego samego typu co pierwszy expression.
NULLIF zwraca pierwszy expression Jeśli dwa wyrażenia nie są równe. Jeśli wyrażenia znajdują się równe, NULLIF zwraca wartość null typu pierwszego expression.
Remarks
NULLIF jest równoznaczne z wyszukiwanych wyrażeń przypadek dwa wyrażenia są równe i wynikowe wyrażenie ma wartość NULL.
Firma Microsoft zaleca, aby nie używać funkcja zależnych od czas, takich jak RAND(), w obrębie danej funkcja NULLIF.Może to spowodować, że funkcja evaluted dwukrotnie i ma zwrócić wywołania dwa różne wyniki.
Przykłady
A.Zwracanie kwoty budżetu, które nie uległy zmianie
Poniższy przykład tworzy budgets tabela, aby pokazać (działdept) jego bieżącej (budżetucurrent_year) i jego wcześniejszych (budżetuprevious_year). W bieżącym roku NULL Służy do działów z budżetów, które nie zostały zmienione z poprzedniego roku i 0 Służy do budżetów, które nie zostały jeszcze ustalone. Aby dowiedzieć się, średnia tylko tych działów, które odbierają budżetu i dołączyć wartości budżetu w poprzednim roku (za pomocą previous_year wartość, której current_year jest NULL), łączyć NULLIF i COALESCE funkcje.
USE AdventureWorks;
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
Here is the result set.
Średnia budżetu
--------------
212500.000000
(dotyczy wiersze 1)
B.Porównanie NULLIF i przypadek
Aby pokazać podobieństwa między NULLIF i CASE, wypróbuj następujące kwerendy czy wartości w polach MakeFlag i FinishedGoodsFlag kolumny są takie same. Używa pierwszej kwerendy NULLIF. W drugiej kwerendzie użyto CASE wyrażenie.
USE AdventureWorks;
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