sql >> Database teknologi >  >> RDS >> Oracle

tilføje måneder til en dato SQL

Din brug af add_months()-funktionen er forkert. Det er ikke to ord, det er bare ét (med en understregning)

add_months(datesold, 1)

bemærk understregningen _ mellem ADD og MONTHS . Det er funktionsopkald, ikke en operatør.

Alternativt kan du bruge:

datesold + INTERVAL '1' month

Selvom det er værd at bemærke, at aritmetikken med intervaller er begrænset (hvis den ikke er brudt), fordi den simpelthen "øger" månedsværdien for datoværdien. Det kan føre til ugyldige datoer (f.eks. fra januar til februar). Selvom dette er dokumenteret adfærd (se nedenstående links) betragter jeg dette som en fejl (SQL-standarden kræver, at disse operationer "Aritmetik adlyder de naturlige regler forbundet med datoer og klokkeslæt og giver gyldige datetime eller intervalresultater i henhold til den gregorianske kalender ")

Se manualen for detaljer:
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

En anden ting:

Hvorfor bruger du så en INSERT udmelding? For at ændre dataene for eksisterende rækker skal du bruge UPDATE . Så det ser ud til, at det du virkelig er ude efter er noget som dette:

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


  1. Postgres - Er dette den rigtige måde at oprette et delvist indeks på en boolesk kolonne?

  2. Er denne kode sikker fra SQL-injektion

  3. Sådan får du det sidste indsatte id fra MySQL i Yii

  4. Hent kolonnedefinition for resultatsæt af lagret procedure