为什么TSQL操作符+的行为不同于聚合函数sum()



TSQL有一个奇怪的行为:

SELECT 1 + NULL

返回NULL

,

SELECT sum(someColumn)  

将始终返回一个整数,忽略空值,除非整个列为空(在这种情况下,它返回null)。

使二元操作符在意义上不同于匹配聚合函数的决定背后的设计选择是什么?

是否有一种方法来克服这个"限制",除了字面上填充我的SQL与coalesce()?

(编辑评论后)

这种行为在大多数形式的SQL中都很常见-在单行级别的算术运算中,"(b)由于Null不是数据值,而是未知值的标记,因此在Null上使用数学运算符会得到未知值,该值由Null表示。"

相反,在聚合函数(即。(跨多行的操作),"所有聚合函数执行Null消除步骤,以便Null值不包括在最终计算结果中。"

引用的两个行为在Wikipedia文章中都有引用,引用了定义这些行为的ISO/IEC标准。

最新更新