Oracle Interval Bug?

时间:2011-05-31 06:38:44

标签: oracle date-arithmetic

我正在使用这个SQL查询:

select sysdate, sysdate - INTERVAL '6' month from dual;

但它是返回:ORA-01839:日期对指定月份无效。

这很奇怪,因为如果我将数字改为9,则返回日期(sysdate = 31/05/11,减去的是31/08/10)。我也尝试使用不同的值:1,3,6,8,11也不起作用,但2,4,5,7,9,12正在工作。

从数字来看,我认为这是因为产生的quert在那个月没有31天。这是预期的行为吗?因为在MySQL中,我可以使用查询(select now() - Interval 6 Month;)来获取正确的值。还有其他办法吗?

我正在使用Oracle 11.1.0.6

2 个答案:

答案 0 :(得分:3)

这是预期的行为;请参阅文档的第六个项目in the datetime/interval arithmetic部分。

正如丽莎所说,你可以使用具有相反行为的add_months - 这有时也会引起混淆。你需要决定哪一个最适合你。

答案 1 :(得分:2)

select sysdate,add_months(sysdate,-6) from dual;