gpt4 book ai didi

sql - 为什么 ORACLE TO_DATE 函数在传递空格时不会在 OR 条件中给出 ORA-01841 错误?

转载 作者:行者123 更新时间:2023-12-01 23:02:57 26 4
gpt4 key购买 nike

SQL> select to_date('    ','YYYYMMDD') from dual;
ERROR at line 1:
ORA-01841: (full) year must be between -4713 and +9999, not be 0

SQL> select * from dual where to_date(' ','YYYYMMDD') = '19960512' or 1 = 2;
ERROR at line 1:
ORA-01841: (full) year must be between -4713 and +9999, not be 0

SQL> select * from dual where to_date(' ','YYYYMMDD') = '19960512' or 1 = 1;
Success.

在前两个语句中,我们将空格传递给 TO_DATE 函数,这给出了预期的错误。但是

现在在第三个语句中,我们将空格传递给 TO_DATE oracle 函数,这是不允许的。但它仍然执行成功。

为什么?

在实际代码中,我可能会从变量传递空格,OR 部分可能为真也可能不为真。

任何人都可以向我解释这种行为以及如何处理错误吗?

P.S - 我在 Oracle 12g EE 上

最佳答案

Oracle 在这里使用短路逻辑。由于已知 1=1 为真,Oracle 优化了对其他条件的评估。因为它从未被评估过,所以你向它传递无效参数这一事实是无关紧要的。

关于sql - 为什么 ORACLE TO_DATE 函数在传递空格时不会在 OR 条件中给出 ORA-01841 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53845883/

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