gpt4 book ai didi

sql - Oracle 中 Order By 子句中 to_number 的不同结果

转载 作者:行者123 更新时间:2023-12-04 23:43:41 27 4
gpt4 key购买 nike

我有两个查询在尝试将 CHAR 转换为 NUMBER 时给出错误 ORA-01722: invalid number

SELECT to_number('NYC TERM') FROM dual;

WITH
x AS (SELECT 'NYC TERM' AS col FROM dual
UNION
SELECT '33' FROM dual)
SELECT *
FROM X
ORDER BY to_number(col);

如果我删除 UNION 查询中的第二个 SELECT 就可以正常工作。为什么它的行为不同?

问题是当我运行一个查询作为一个整体返回其他行时它会出错,但是当我只运行具有这种数据的特定记录时它运行正常。

 WITH
x AS (SELECT 'NYC TERM' AS col FROM dual)
SELECT * FROM X ORDER BY to_number(col);

最佳答案

评论有点长。

我认为正在发生的事情是 Oracle 出于性能原因将 order by 短路。只有一行,根本不需要排序,所以即使键也不会被评估。在这个荒谬的例子中或许可以更清楚地看到这一点:

 WITH x AS (SELECT 'NYT TERM' AS col FROM DUAL)
SELECT * FROM X ORDER BY length(col) / 0;

这将返回一行一列,'NYT TERM'。没有错误。

我想这被认为是一个“功能”。

关于sql - Oracle 中 Order By 子句中 to_number 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180774/

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