You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SELECT SYSDATE-1-DATE '2019-01-01'可行,另一条SQL却不行?

问题解答:为何两条SQL语句执行结果不同?

第一条语句能正常执行的原因

看这条语句:

SELECT SYSDATE - 1 - DATE '2019-01-01' FROM DUAL

在Oracle中,日期类型减数字是合法操作,作用是把日期往前推指定天数——这里SYSDATE - 1会得到当前日期前一天的日期。之后用这个新日期减去DATE '2019-01-01',属于日期减日期的操作,Oracle会自动计算两个日期之间的天数差,整个运算流程完全符合Oracle的类型规则,所以能正常执行。

第二条语句执行失败的原因

再看这条语句:

SELECT 1 - SYSDATE - DATE '2019-01-01' FROM DUAL

SQL运算默认遵循从左到右的顺序(无括号时),所以会先执行1 - SYSDATE。这里是数字减日期,Oracle没有定义这种操作的规则,它无法将日期类型直接转换为能和数字做减法的数值类型,因此会抛出类型不兼容的错误,导致语句无法运行。

总结来说:第一条语句的运算顺序是先做合法的日期减数字,再做合法的日期减日期;第二条先触发了非法的数字减日期操作,直接报错。

内容的提问来源于stack exchange,提问作者Alex Dannenberg Bovone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:34:37