NULLIF (Transact-SQL)
更新: 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 日 |
|