-
Datumsberechnungen: Monate addieren/subtrahieren
Hallo Zusammen,
ich habe eine Frage an die Spezialisten der Datumsberechnungen:
Ich möchte ab einem eingegebenen Datum monatliche Sätze erstellen, d.h. ab 01.08.2015 jeden Monat bis vorgeg. Ende: 01.09.2015, 01.10.2015 etc.
Ich rechne den nächsten Monat mit: EVAL $DATD01 += %MONTHS(1)
Wie löse ich das elegant, wenn ich den 30. oder 31. eingebe? 31.1. + 1 Monat gibt 28 (oder 29.)2., die nächste Addition bringt mir den 28.3.
Ich kann natürlich schon die althergebrachten Prüfungen einbauen, damit es funkt., aber nachdem die Addition mit Monaten so schön ist und auch die Gültigkeitsprüfung auf das Monatsende quasi beinhaltet, frage ich mich, ob es etwas besseres geben könnte?
Vielen Dank!
-
Moin,
bleib doch bei deiner Basis und erhöhe die Anzahl Monate die du drauf rechnest.
RestProblem: Start = 28.2. da mußt du die Basis selber verändern
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
nextUltimo = ((ultimo + %days(1))
+ %months(1)) - %days(1);
-
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
... wenn der Ultimo schon Schlunz war, geht auch:
ultimo = anyDate + %months(1);
ultimo = ultimo - %days(%subdt(ultimo : *DAYS));
das liefert den Ultimo zu einem beliebigen Datum.
D*B
-
Danke für die schnellen Antworten.
D*B, das funktioniert super beim 31., da ich dann ja immer den Ultiomo möchte.
Wenn ich aber den 30. habe und eben immer den 30. möchte, funktioniert es schon nicht mehr.
-
Stimmt.
Aber woher sollen wir wissen was du willst?
dann musst du doch meine Methode nehmen.
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
... im Februar gibt es keinen 30. zu möchten, ansonsten kann ich natürlich auch auf den 1. eines Monats 29 Tage drauf addieren - lass doch mal Deine Phantasie spielen gehen...
D*B
-
Dann verwende doch die SQL-Funktion ADD_MONTHS(Datum, AnzMonate).
Wenn das Ausgangsdatum ein Monatsende ist, wird das Zieldatum auch ein Monatsende sein, unabhängig ob das Monatsende des Ausgangsdatum der 28, 29, 30 oder 31 ist.
Ist das Ausgangsdatum kein Monatsende, so wird die Anzahl der Monate addiert. Existiert das rechnerische Zieldatum nicht, z.B. auf den 31.01 wird ein Monat addiert, so wird das Monatsende im Ziel-Monat verwendet.
Code:
Exec SQL Set :NewDate = Add_Months(:StartDate, 3);
Um sicherzustellen, dass das Ausgangsdatum immer ein Monatsende ist, kann man zusätzlich noch die Funktion LAST_DAY verwenden
Code:
Exec SQL Set :NewDate = Add_Months(Last_Day(:StartDate), 3);
Birgitta
-
Nett, vielen Dank euch beiden.
-
Danke Birgitta, das ist genau das, was ich brauche!
Similar Threads
-
By Konrad Pietzka in forum NEWSboard Server & Hardware Markt
Antworten: 1
Letzter Beitrag: 28-06-01, 15:24
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks