更新: 2006 年 12 月 12 日
如果兩個指定的運算式相等,便傳回 Null 值。
語法
NULLIF ( expression , expression )
引數
expression
這是任何有效的純量運算式。如需詳細資訊,請參閱<運算式 (Transact-SQL)>。
傳回類型
傳回與第一個 expression 相同的類型。
如果兩個運算式不相等,NULLIF 會傳回第一個 expression。如果運算式相等,NULLIF 會傳回第一個 expression 之類型的 Null 值。
備註
NULLIF 相當於兩個運算式相等且產生的運算式為 NULL 的搜尋 CASE 函數。
我們建議您不要在 NULLIF 函數中使用時間相依函數,例如 RAND()。這可能會導致系統評估此函數兩次,並且傳回與兩個引動過程不同的結果。
範例
A. 傳回尚未變更的預算數量
下列範例會建立一份 budgets 資料表,來顯示部門 (dept) 及其目前預算 (current_year) 和前一年的預算 (previous_year)。對今年而言,如果部門預算與前一年相同,就使用 NULL,如果預算仍未確定,就使用 0。若只要知道收到預算之部門的平均值,且要併入前一年的預算值 (使用 previous_year 值,其中 current_year 是 NULL),便將 NULLIF 和 COALESCE 函數組合起來。
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
下列查詢會評估 MakeFlag 和 FinishedGoodsFlag 資料行中的值是否相同,以顯示 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)
說明及資訊
變更歷程記錄
| 版本 | 歷程記錄 |
|---|---|
2006 年 12 月 12 日 |
|
2006 年 4 月 14 日 |
|
.gif)