2009-06-04 17 views

Antwort

6
SELECT ADD_MONTHS(SYSDATE, -6) FROM dual 

Siehe ADD_MONTHS().

+0

+1 für die richtige Antwort, aber vor allem für die Aufnahme eines Links, der auf die am besten geeignete Dokumentation verweist. – spencer7593

4

Sie schreiben: "Ich genau 6 Monate ab einem bestimmten Datum subtrahieren wollen". Aber was genau ist "genau 6 Monate"? Es ist nicht trivial. Nehmen wir zum Beispiel den 30. August 2009. Welches Datum ist genau 6 Monate früher? Oder 28. Februar 2009 ...

Also muss man definieren, was Sie meinen, und dann entscheiden, welche Methode Sie verwenden möchten:

  • ADD_MONTHS (..., - 6)
  • -interval '6' Monat
  • eigenen Code

Ein Beispiel:

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 

Wie Sie sehen können, gibt es einen deutlichen Unterschied zwischen add_months und der Intervallnotation.

Grüße, Rob.

+1

guten Punkt, wenn das Geschäft sagt "wir wollen es genau sechs Monate", müssen Sie fragen: "Was bedeutet das genau?" Ich hatte Fälle, in denen das Geschäft "einen Monat" für 28 Tage hält. Ansonsten ist ADD_MONTHS normalerweise ausreichend. –

Verwandte Themen