Ошибка интервала Oracle? - PullRequest
2 голосов
/ 31 мая 2011

Я использую этот 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 работают.

Из чисел, я думаю, этопотому что у полученного керта нет 31 дня за этот месяц.Это ожидаемое поведение?Потому что в MySQL я могу использовать запрос (выберите now () - Interval 6 Month;), чтобы получить правильное значение.Есть ли другой способ?

Я использую Oracle 11.1.0.6

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Это ожидаемое поведение; см. шестую марку в разделе арифметики дата / время документации.

Как говорит Лиза, вы можете использовать add_months, который имеет противоположное поведение - что иногда может также вызвать путаницу. Вам нужно решить, что вам больше подходит.

2 голосов
/ 31 мая 2011
select sysdate,add_months(sysdate,-6) from dual;
...