NULLIF (Transact-SQL)

更新: 2006 年 12 月 12 日

如果兩個指定的運算式相等,便傳回 Null 值。

主題連結圖示Transact-SQL 語法慣例

語法

NULLIF ( expression , expression )

引數

傳回類型

傳回與第一個 expression 相同的類型。

如果兩個運算式不相等,NULLIF 會傳回第一個 expression。如果運算式相等,NULLIF 會傳回第一個 expression 之類型的 Null 值。

備註

NULLIF 相當於兩個運算式相等且產生的運算式為 NULL 的搜尋 CASE 函數。

我們建議您不要在 NULLIF 函數中使用時間相依函數,例如 RAND()。這可能會導致系統評估此函數兩次,並且傳回與兩個引動過程不同的結果。

範例

A. 傳回尚未變更的預算數量

下列範例會建立一份 budgets 資料表,來顯示部門 (dept) 及其目前預算 (current_year) 和前一年的預算 (previous_year)。對今年而言,如果部門預算與前一年相同,就使用 NULL,如果預算仍未確定,就使用 0。若只要知道收到預算之部門的平均值,且要併入前一年的預算值 (使用 previous_year 值,其中 current_yearNULL),便將 NULLIFCOALESCE 函數組合起來。

USE AdventureWorks;
GO
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'budgets')
   DROP TABLE budgets;
GO
SET NOCOUNT ON;
CREATE TABLE 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

以下為結果集:

Average Budget                           
---------------------------------------- 
212500.000000

(1 row(s) affected)

B. 比較 NULLIF 和 CASE

下列查詢會評估 MakeFlagFinishedGoodsFlag 資料行中的值是否相同,以顯示 NULLIF 和 CASE 之間的相似度。第一個查詢使用 NULLIF。第二個查詢則使用 CASE 陳述式。

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

請參閱

參考

CASE (Transact-SQL)
decimal 和 numeric (Transact-SQL)
系統函數 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增有關在 NULLIF 內部使用有時效性函數的資訊。

2006 年 4 月 14 日

新增內容:
  • 新增顯示 NULLIF 和 CASE 之間相似度的範例。