MYSQL - Datumsberechnung mit DATE-Typ

Descartes

Erfahrenes Mitglied
Hallo!

In der Tabelle user gibt es zwei Spalten mit DATE - Werten. "Eingangkuendigung" und "Kuendigungzum".
Nun soll aus dem Datum in "Eingangkuendigung" für die gesamte Tabelle das Datum in "Kuendigungzum" berechnet werden.

Dabei soll der Tag in allen Fällen zum 31. werden.
Sodann sollen 3 Monate addiert werden.

In der Dokumentation habe ich gefunden:
"...Wenn Sie MONTH, YEAR_MONTH oder YEAR hinzuzählen und das Datumsergebnis einen Tag hat,
der größer ist als der höchste Tag für den neuen Monat, wird der Tag auf den höchsten
Tag des neuen Monats angepasst: ..."

Damit ich in der Spalte "Kuendigungzum" immer das Datum in der DATE-Form

"YYYY-MM-Letzter des Monats" erhalte.

Als Beispiel einer meiner (mittlerweile zahllosen) Versuche:

Code:
//Kuendigungzum Datum wird automatisch aus Eingangkuendigung berechnet 
mysql_query("UPDATE user SET Kuendigungzum = 'YEAR(user.Eingangkuendigung)-MONTH(user.Eingangkuendigung)-31'"); 
mysql_query("UPDATE user SET user.Kuendigungzum = DATE_ADD(user.Eingangkuendigung, INTERVAL 3 MONTH)");

Vielen Dank, für einen Rat!

Grüße

Descartes
 
Hallo Descartes,
Du willst den letzten Tag des Monats, der 3 Monate nach einem bestimmten Datum liegt, oder? Hier mein Lösungs-Ansatz:
Code:
DATE_SUB(CONCAT(LEFT(DATE_ADD(datum, INTERVAL 4 MONTH), 8), '01'), INTERVAL 1 DAY)
Sieht wild aus, zugegeben.
Diese Formel addiert zu einem Datum 4 Monate dazu (DATE_ADD), nimmt davon nur die ersten 8 Zeichen, also Jahr und Monat (LEFT), hängt '01' hinten dran (CONCAT) und zieht von diesem Datum wieder einen Tag ab (DATE_SUB).
Vielleicht gibt's eine enfachere Lösung, lasse mich da gerne belehren.
Dein Beispiel müsste also so aussehen:
Code:
mysql_query("UPDATE user SET Kuendigungzum = DATE_SUB(CONCAT(LEFT(DATE_ADD(user.Eingangkuendigung, INTERVAL 4 MONTH), 8), '01'), INTERVAL 1 DAY)");
Hoffe geholfen zu haben,
Grüße,
Martin
 
Hallo Martin!

Du willst den letzten Tag des Monats, der 3 Monate nach einem bestimmten Datum liegt, oder?

Ja, genau.

Vielen Dank für den Vorschlag!

Werde es gleich am Montag mal ausprobieren und dann das Ergebnis nochmals posten !

Grüße

Descartes
 
Hallo Martin!

Es sieht vielleicht wild aus, aber es funktioniert einfach wunderbar!

Vielen Dank nochmal!

Grüße
Descartes
 
Zurück