Oracle
 sql >> Base de données >  >> RDS >> Oracle

ajouter des mois à une date SQL

Votre utilisation de la fonction add_months() est incorrecte. Ce n'est pas deux mots, c'est juste un (avec un trait de soulignement)

add_months(datesold, 1)

notez le trait de soulignement _ entre ADD et MONTHS . C'est un appel de fonction et non un opérateur.

Vous pouvez également utiliser :

datesold + INTERVAL '1' month

Bien qu'il convient de noter que l'arithmétique avec des intervalles est limitée (sinon cassée) car elle "incrémente" simplement la valeur du mois de la valeur de la date. Cela peut entraîner des dates invalides (par exemple de janvier à février). Bien qu'il s'agisse d'un comportement documenté (voir les liens ci-dessous), je considère qu'il s'agit d'un bogue (la norme SQL exige que ces opérations « L'arithmétique obéisse aux règles naturelles associées aux dates et aux heures et produisent des résultats de date/heure ou d'intervalle valides selon le calendrier grégorien ")

Consultez le manuel pour plus de détails :
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

Autre chose :

Alors pourquoi utilisez-vous un INSERT déclaration? Pour modifier les données des lignes existantes, vous devez utiliser UPDATE . Il semble donc que ce que vous recherchez vraiment ressemble à ceci :

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