sql >> Databasteknik >  >> RDS >> Oracle

lägga till månader till ett datum SQL

Din användning av add_months()-funktionen är felaktig. Det är inte två ord, det är bara ett (med ett understreck)

add_months(datesold, 1)

notera understrecket _ mellan ADD och MONTHS . Det är funktionsanrop inte en operatör.

Alternativt kan du använda:

datesold + INTERVAL '1' month

Även om det är värt att notera att aritmetiken med intervall är begränsad (om den inte är bruten) eftersom den helt enkelt "ökar upp" månadsvärdet för datumvärdet. Det kan leda till ogiltiga datum (t.ex. från januari till februari). Även om detta är dokumenterat beteende (se länkarna nedan) anser jag att detta är en bugg (SQL-standarden kräver att dessa operationer "Aritmetik följer de naturliga reglerna som är associerade med datum och tider och ger giltiga datum- och intervallresultat enligt den gregorianska kalendern ")

Se manualen för 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 annan sak:

Varför använder du då en INSERT påstående? För att ändra data för befintliga rader bör du använda UPDATE . Så det verkar som det du verkligen är ute efter är något sånt här:

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


  1. Ladda data i MySQL-fil med absolut URL

  2. php-utgång från mysql till html-tabell

  3. C# Databasabstraktion för Microsoft SQL Server, Oracle, MySQL och DB2

  4. Att ställa in värdet för en kolumn av alla rader är mycket långsamt