NULLIF (Transact-SQL)
SQL Server 2005
更新:
2006 年 12 月 12 日
如果兩個指定的運算式相等,便傳回 Null 值。
- expression
-
這是任何有效的純量運算式。
如需詳細資訊,請參閱<運算式 (Transact-SQL)>。
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
社群新增項目
新增
顯示:

