Oracle 11g
希望这是一个快速的。
以下是仅从下个月开始获取日期的脚本的一部分 下个月的第一天到最后一天。但今天29日它发了一个错误 ORA-01839:日期对指定的月份无效
M.MS_DATE between trunc(sysdate + interval '1' month,'MM') and last_day(sysdate + interval '1' month)
有没有办法解决这个问题。非常感谢
答案 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。
当间隔计算返回日期时间值时,结果必须是实际的日期时间值,否则数据库将返回错误