Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hinzufügen von Monaten zu einem Datum SQL

Ihre Verwendung der Funktion add_months() ist falsch. Es sind nicht zwei Wörter, sondern nur eines (mit Unterstrich)

add_months(datesold, 1)

Beachten Sie den Unterstrich _ zwischen ADD und MONTHS . Es ist ein Funktionsaufruf, kein Operator.

Alternativ können Sie auch verwenden:

datesold + INTERVAL '1' month

Obwohl es erwähnenswert ist, dass die Arithmetik mit Intervallen begrenzt (wenn nicht kaputt) ist, weil sie einfach den Monatswert des Datumswerts "erhöht". Das kann zu ungültigen Daten führen (z. B. von Januar bis Februar). Obwohl dies ein dokumentiertes Verhalten ist (siehe untenstehende Links), halte ich dies für einen Fehler (der SQL-Standard erfordert, dass diese Operationen "Arithmetik den natürlichen Regeln für Datum und Uhrzeit gehorchen und gültige Datums- und Intervallergebnisse gemäß dem gregorianischen Kalender liefern". /em> ")

Einzelheiten finden Sie im Handbuch:
http ://docs.oracle.com/cd/E11882_01/server.112/e26088/functions011.htm#i76717
http://docs.oracle .com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i48042

Noch was:

Warum verwenden Sie dann ein INSERT Aussage? Um die Daten bestehender Zeilen zu ändern, sollten Sie UPDATE verwenden . Es scheint also, was Sie wirklich suchen, ist etwas wie das:

update auctions
   set datesold = add_months(datesold, 1)
where item = 'Radio';