NULLIF (Transact-SQL)
更新日期: 2006 年 12 月 12 日
如果两个指定的表达式相等,则返回空值。
语法
NULLIF ( expression , expression )
参数
expression
任何有效的标量表达式。有关详细信息,请参阅表达式(Transact-SQL)。
返回类型
返回类型与第一个 expression 相同。
如果两个表达式不相等,则 NULLIF 返回第一个 expression 的值。如果表达式相等,则 NULLIF 返回第一个 expression 类型的空值。
备注
如果两个表达式相等且结果表达式为 NULL,则 NULLIF 等价于 CASE 的搜索函数。
我们建议在 NULLIF 函数内不要使用依赖于时间的函数,如 RAND()。这会使函数计算两次并从两次调用中返回不同的结果。
示例
A. 返回尚未更改的预算数量
以下示例创建 budgets
表以显示部门 (dept
) 的当年预算 (current_year
) 以及上一年预算 (previous_year
)。对于当年预算,那些同上一年相比预算没有改变的部门使用 NULL
,那些预算还没有确定的部门使用 0
。若要只计算那些接收预算的部门的预算平均值,并包含上一年的预算值(current_year
为 NULL
时,使用 previous_year
的值),请组合使用 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
若要显示 NULLIF 和 CASE 之间的相似性,则以下查询将计算 MakeFlag
和 FinishedGoodsFlag
列中的值是否相同。第一个查询使用 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 日 |
|