sql-server - 为什么 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 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
推荐阅读
- reactjs - 如何进行反应钩子API调用并仅显示一项
- node.js - 多次发射
- typo3 - TYPO3 8:意译模式下的 sys_language_overlay
- python-3.x - Windows 上的 Python 子进程:启动子进程“cmd.exe”并为其提供 bat 文件,停止主进程执行
- mysql - 如何从具有不同ID的表中选择相同的列
- python - django-rest-framework:在 ModelViewSet 中添加批量操作
- java - 如何使用 vavr 返回 void 或 String
- sql-server - 将 XML 数据插入到表中
- rbokeh - rbokeh 颜色参数 - 传说在 R 3.6 上搞砸了
- sql - 创建表数据库