首页 > 解决方案 > 为什么 count(1/null) 有效但 count(null/null) 无效?

问题描述

我最近在一次演示中看到了这个例子。当您运行这样的查询时:

SELECT COUNT(NULL)

您收到以下错误:

操作数数据类型 NULL 对计数运算符无效。

当你运行这个:

SELECT COUNT(1/NULL)

结果是 0,即使除法本身会产生 NULL 作为结果。如果交换 1 和 NULL,也会发生同样的情况。

但如果你这样做:

SELECT COUNT(NULL/NULL)

您再次得到与第一个查询相同的错误(除法本身是合法的,产生 NULL)。

任何人都可以解释 sql server 是如何产生这种结果的吗?

标签: sql-servertsqlnull

解决方案


在 SQL Server 中,某些聚合函数(如 COUNT、MIN、MAX)和函数(如 DATEADD)需要数据类型。NULL,就其本身而言,没有一个,因此这会给您一个错误:

SELECT COUNT(NULL) -- Operand data type NULL is invalid for count operator.

同样适用于:

SELECT COUNT(NULL/NULL)

对于1/NULL数据类型是 INT 并且值是 NULL 所以这是有效的:

SELECT COUNT(1/NULL) -- 0

同样适用于:

SELECT COUNT(CAST(NULL AS INT)) -- 0

推荐阅读