【发布时间】:2019-08-01 13:21:01
【问题描述】:
我遇到了this 关于编程难题和代码高尔夫的答案。在其中,作者使用了表达式(尽管答案已被编辑以使用不同的解决方案):
row_number()over(order by 1/0)
我原以为1/0 会导致除以零异常,但事实并非如此。
当我在PPCG上询问作者时,他们回答“因为没有计算1/0。where exists(select 1/0)会产生相同的效果”。这让我有点不知所措,因为where exists(select 1) 是有效的语法,但row_number()over(order by 1) 不是。那么为什么order by中的表达式没有计算出来呢?表达式的结果是整数,order by 中不允许使用整数。在这种情况下,SQL Server 如何处理order by?我假设效果与row_number()over(order by (SELECT NULL)) 相同,但如果我们给出一个表达式,我希望该表达式会被计算。
巧合的是,如果有人使用类似的东西:
SELECT ROW_NUMBER() OVER ( ORDER BY A.x )
FROM (
SELECT *
, 1 / 0 x
FROM master..spt_values
) A
同样,不报告除以零错误(当未选择 x 列时,自然)。那么为什么在整数不是时允许这样做呢?
【问题讨论】:
标签: sql sql-server window-functions divide-by-zero