Oracle ORA-01839:日期对月份指定的闰年无效

时间:2015-01-29 09:49:04

标签: oracle oracle11g

Oracle 11g

希望这是一个快速的。

以下是仅从下个月开始获取日期的脚本的一部分  下个月的第一天到最后一天。但今天29日它发了一个错误 ORA-01839:日期对指定的月份无效

M.MS_DATE between trunc(sysdate + interval '1' month,'MM') and last_day(sysdate + interval '1' month)

有没有办法解决这个问题。非常感谢

2 个答案:

答案 0 :(得分:7)

我也看到了这一点,我认为这是Oracle中的一个错误。

解决方法是改为使用add_months()

between trunc(add_months(sysdate,1),'MM') and last_day(add_months(sysdate,1));

答案 1 :(得分:1)

我可能会使用add_months()作为a_horse_with_no_name建议,但是如果你想使用间隔,你可以移动你在第一个表达式中截断的点,并在第二个表达式中包含相同的截断表达式:

select trunc(sysdate, 'MM') + interval '1' month as first_day,
  last_day(trunc(sysdate, 'MM') + interval '1' month) as last_day
from dual;

FIRST_DAY  LAST_DAY  
---------- ----------
2015-02-01 2015-02-28 

这是有效的,因为所有月份都有第一天,因此您不会绊倒documented caveat

  

当间隔计算返回日期时间值时,结果必须是实际的日期时间值,否则数据库将返回错误