NULLIF (Transact-SQL)

更新日期: 2006 年 12 月 12 日

如果两个指定的表达式相等,则返回空值。

主题链接图标Transact-SQL 语法约定

语法

NULLIF ( expression , expression )

参数

返回类型

返回类型与第一个 expression 相同。

如果两个表达式不相等,则 NULLIF 返回第一个 expression 的值。如果表达式相等,则 NULLIF 返回第一个 expression 类型的空值。

备注

如果两个表达式相等且结果表达式为 NULL,则 NULLIF 等价于 CASE 的搜索函数。

我们建议在 NULLIF 函数内不要使用依赖于时间的函数,如 RAND()。这会使函数计算两次并从两次调用中返回不同的结果。

示例

A. 返回尚未更改的预算数量

以下示例创建 budgets 表以显示部门 (dept) 的当年预算 (current_year) 以及上一年预算 (previous_year)。对于当年预算,那些同上一年相比预算没有改变的部门使用 NULL,那些预算还没有确定的部门使用 0。若要只计算那些接收预算的部门的预算平均值,并包含上一年的预算值(current_yearNULL 时,使用 previous_year 的值),请组合使用 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

若要显示 NULLIF 和 CASE 之间的相似性,则以下查询将计算 MakeFlagFinishedGoodsFlag 列中的值是否相同。第一个查询使用 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 的相似性的示例。