Oracle中使用【Interval】对【日期】进行【相加减】,报错 ORA-01839:指定月份的日期无效(Interval的坑)

1.

   在对某些表进行旧数据的删除,必然是通过【时间】删除之前较为久远的数据,比如1年前,6个月前,7天前的数据等等情况,这个时候的SQL,必然会出现条件: where time < 时间 - 间隔
    对于oralce来说,当时使用了 where time < SYSDATE - INTERVAL '10' MONTH ,一开始自测也好好的,之后则报错:ORA-01839:指定月份的日期无效

2.

    导致会报错ORA-01839:指定月份的日期无效的原因如下:
        若此时日期是:2023-05-31,使用SQL - INTERVAL '3' MONTH,则会得到2023-02-31,2月份不可能会有31号
        因此会报错指定月份的日期无效,该报错不是说- INTERVAL '3' MONTH中的3有问题,而是指得到的结果日期有问题
        INTERVAL 不会特殊处理 2月份的情况,因此是有一定缺陷的。
    解决方法:使用oracle中的ADD_MONTHS函数,其是会自动调整日期:
        使用方式:ADD_MONTHS(日期,正负数字),如:ADD_MONTHS(日期,3) 是向后加三个月,ADD_MONTHS(日期,-3) 是向前减三个月
        若此时日期是:2023-05-31,使用SQL ADD_MONTHS('2023-05-31',-3),则会得到2023-02-28,不会报错,是函数自带处理。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值