Udostępnij za pośrednictwem


NULLIF (Transact-SQL)

Zwraca wartość null , jeśli dwa wyrażenia określone są równe.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

NULLIF ( expression , expression )

Argumenty

  • expression
    Dowolny prawidłowy wartość skalarnajestwyrażenie.

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