gpt4 book ai didi

sql - 操作数数据类型 NULL 对于 max 运算符无效

转载 作者:行者123 更新时间:2023-12-02 15:44:01 25 4
gpt4 key购买 nike

这段代码工作正常:

select fk, max(case when 1 = 0 then 1 else null end) maxx
from (values(1, null), (1, null)) x(fk, a)
group by fk;

输出:

fk          maxx
----------- -----------
1 NULL

与:

警告:空值会被聚合或其他 SET 操作消除。

但是这段代码:

select fk, max(a) maxx
from (values(1, null), (1, null)) x(fk, a)
group by fk;

给出错误:

消息 8117,级别 16,状态 1,第 5 行
操作数数据类型 NULL 对于 max 运算符无效。

在这两种情况下,sql server 都会根据 nullnull 计算 max?不是吗?

最佳答案

在第一种情况下,您隐式指定数据类型,即整数。这是从永远不会到达的 then 推断出来的。 then 不会被执行这一事实对于 sql server 来说并不重要。 In fact ,sql server 确定返回类型的方式:“result_expressions可选 else_result_expression 中类型集中的最高 precedence 类型”。因此,返回类型是在实际执行之前从 thenelse 中返回的所有潜在数据类型中选择的。换句话说,在 sql server“意识到”某些语句不可能到达之前。

由于数据类型已知,因此可以应用max

在第二种情况下,您没有指定数据类型,因此sql server无法知道如何实现maxvarcharmax 与整数的 max 不同。

关于sql - 操作数数据类型 NULL 对于 max 运算符无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45922073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com