【发布时间】:2016-10-08 23:11:37
【问题描述】:
在 group-by 子句中使用 a char-cast 会产生意想不到的结果:
select cast(col as char(2)) from (
select 'Abc' as col from dual
union all
select 'Abc' as col from dual
) group by cast(col as char(10));
结果为@987654323@(10 个字符长)。 直觉上,我预计 Oracle 会返回以下内容之一:
- 错误:'not a group-by expression',因为 group-by 子句不是选择子句
- 长度为 2
'Ab'的结果。
将cast(col as char(2)) 替换为cast(col as char(3)),Oracle 返回错误“不是分组表达式”。这又是一个非常奇怪的行为。
如何解释?背后的原因是什么?
我正在使用 Oracle SQL 11g。
【问题讨论】:
-
我刚刚在 11g 上进行了测试,它对 1-11 的值产生了相同的结果,除了 3。确实很奇怪。对我来说,这似乎是一个错误。返回应该是
'Ab'。如果使用聚合函数,则会返回预期值。 -
为什么在不使用聚合函数的查询中使用 group by?
-
可能是oracle误解了查询的意图造成的。试试看这个:stackoverflow.com/q/25792979/2436051.
-
@JensKrogsboell 我尝试使用 NO_QUERY_TRANSFORMATION 提示,但没有效果。
标签: sql oracle oracle11g group-by