sql-server - 为什么 TSQL 运算符 + 的行为与聚合函数 sum() 不同

标签 sql-server t-sql null

TSQL 有一个奇怪的行为:

SELECT 1 + NULL

返回NULL

同时

SELECT sum(someColumn)  

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

使二元运算符的含义与匹配聚合函数不同的决定背后的设计选择是什么?

除了用coalesce()填充我的SQL之外,有没有办法克服这个“限制”?

(评论后编辑)

最佳答案

这种行为对于大多数形式的 SQL 都很常见 - 在单行级别 arithmetic operations ,“(b)因为Null不是一个数据值,而是一个未知值的标记,对Null使用数学运算符会得到一个未知值,用Null来表示。”

相比之下,在aggregate functions中(即跨多行的操作),“所有聚合函数都会执行 Null 消除步骤,以便 Null 值不会包含在最终的计算结果中。”

维基百科文章中引用了这两种引用的行为,引用了定义这些行为的 ISO/IEC 标准。

关于sql-server - 为什么 TSQL 运算符 + 的行为与聚合函数 sum() 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196713/

相关文章:

SQL 服务器 : How to change collation of all columns of my select on the fly

sql - T-SQL 计数二叉树中的子节点?

c - 在c中取消引用空指针

php - 为什么 $db PDO 对象在构造函数参数中作为 null 传递?

c++ - 无法将 ‘0l’ 从 ‘long int’ 转换为 ‘MemoryManager’

sql - 如何在 SQL Server 数据库架构中找到所有填充 100% 空值的列?

sql-server - SSL 是否在内部使用散列?

sql - 两个日期之间不同年份的列表

sql - 根据前几天的计算进行递归计算

t-sql - Azure SQL 数据仓库 "Impacted RowCount"