Рассчитать дату в Oracle SQL - PullRequest
1 голос
/ 04 июня 2009

Я хочу вычесть ровно 6 месяцев с указанной даты. Как вы делаете это в Oracle SQL?

Ответы [ 3 ]

6 голосов
/ 04 июня 2009
SELECT ADD_MONTHS(SYSDATE, -6) FROM dual

См. ADD_MONTHS().

4 голосов
/ 05 июня 2009

Вы пишете "Я хочу вычесть ровно 6 месяцев от указанной даты". Но что такое "ровно 6 месяцев"? Это не тривиально. Например, возьмем 30 августа 2009 года. Какая дата ровно на 6 месяцев раньше? Или 28 февраля 2009 года ...

Таким образом, вы должны определить, что вы имеете в виду, а затем решить, какой метод вы хотите использовать:

  • add_months (..., - 6)
  • -интервал '6' месяц
  • собственный код

Пример:

SQL> select add_months(date '2009-08-30', -6)
  2       , add_months(date '2009-02-28', -6)
  3    from dual
  4  /

ADD_MONTHS(DATE'200 ADD_MONTHS(DATE'200
------------------- -------------------
28-02-2009 00:00:00 31-08-2008 00:00:00

1 row selected.

SQL> select date '2009-02-28' - interval '6' month
  2    from dual
  3  /

DATE'2009-02-28'-IN
-------------------
28-08-2008 00:00:00

1 row selected.

SQL> select date '2009-08-30' - interval '6' month
  2    from dual
  3  /
select date '2009-08-30' - interval '6' month
                         *
ERROR at line 1:
ORA-01839: date not valid for month specified

Как видите, между add_months и интервальной нотацией есть четкая разница.

С уважением, Роб.

1 голос
/ 04 июня 2009

add_months (..., -6)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...