# Datum + X Monate



## miketech (13. Aug 2007)

Hi zusammen,

ich habe ein Datum, in der Form von 13.08.2007, also:

DD.MM.YYYY

Das Datum habe ich in einer Datenbank gespeichert und möchte nun mit SQL das Datum + X Monate berechnen. 

Meine Idee für den neuen Monat war nun:

(Month(date) + X) mod 12

Und für das Jahr:

(Year(date) + (Month(date) + X) / 12)

Das funktioniert soweit auch. Mein Problem ist beim Monat, dass er natürlich durch das mod 12 nur von 0 - 11 geht, statt von 1-12.

Hat jemand eine Idee, wie ich das nun hinbiegen kann? Ich bräuchte danach etwas der Form:

if month == 0 month = 12

Aber das ganze läuft in einer SQL Abfrage, da geht das nicht. 

Gruß

Mike


----------



## SlaterB (13. Aug 2007)

((neuerMonat -1 ) mod 12 +1)

aber willst du wirklich einen ganzen Kalender in der DB nachbauen?
mit unterschiedlichen Tagen pro Monat und Schaltjahren?


----------



## miketech (13. Aug 2007)

Hi,

ah so könnte es gehen, danke 

Aber nun habe ich Probleme mit dem Jahr. Bsp:

10.2007 + 14 Monate

Neuer Monat = 23 Mod 12 + 1 = 12 (passt)
2007 + 24 / 12 (=2) = 2009

Hier müsste aber ja 2008 rauskommen. 

Naja, neuer Kalender, ich muss einfach zu einem Feld in einer DB (als Datum gespeichert) eine bestimmte Anzahl Monate hinzufügen. Die Monate sind wieder in einer anderen Tabelle gespeichert. Man muss dazu sagen, dass das neue Datum nur die Form mm.yyyy haben muss. Die Tage spielen hier keine Rolle mehr. D.h. ich muss nicht den 29.02.xxxx plötzlich zum 28.02.zzzz umbauen, falls Du das meintest.

Gruß

Mike


----------



## SlaterB (13. Aug 2007)

da ich dir nun schon was von -1 und +1 erzählt habe,
ist da das -1 für die Jahresberechnung nicht offensichtlich? (nicht generell 1 Jahr abziehen, sondern einen Monat)


----------



## miketech (13. Aug 2007)

Hi,

grmpf. Das hatte ich eben auch überlegt und ich dachte ich hätte ein Beispiel gefunden, wo es nicht geht. Aber hab mich hier wohl vertan, sorry.

Gruß

Mike


----------



## pat2004 (18. Aug 2007)

hi

du könntest einfach die klasse date und gregorian calender verwenden


----------

