[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    509

    Jahr im Datum ändern - steh auf dem Schlauch

    Hätte nicht gedacht mit so einer trivialen Frage im Forum zu landen.

    Ich möchte in einem *EUR Datumsfeld nur das Jahr ändern (Systemdatum - 3 Jahre) für ein Startdatum. z.B. 1.1.2015. Ich schaff's nicht mit den Built-in Funktionen. SQL möcht ich nicht und Umwege über numerische Felder auch nicht.

    Hat da jemand einen Tipp für mich. Danke.
    kf

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.220
    Probiers mal mit SUBDUR (*YEARS oder *Y) oder %YEARS. (Datumsoperationen)

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    1.583
    Wenn es nicht *free sein muß ...
    DT1 und DT2 sind hier Datum Felder *EUR

    Code:
    C                                 z-add       3                  anz    
    C                 DT1           SUBDUR    anz:*Y          DT2
    Interessante Umfrage zur Nutzung der AS/400

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    17.537
    Wie wärs mit:

    eval MyDate += %years(3)

    bzw. in free:

    MyDate += %years(3);
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jan 2007
    Beiträge
    509
    ich möchte das Jahr auf einem vordefiniertem Datumsfeld ersetzen. z.B. 01.01.2000.
    Also aus 2000 soll 2015 werden. Und das in free. Allerdings, lange mach ich das nicht mehr mit.
    Dann halt mit Hilfsfeldern, schön geht anders.
    kf

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    355
    Wo ist das Problem? Wenn das Feld als Datumsfeld definiert ist, geht es so

    Code:
    C                       EVAL datFeld = datFeld + %YEARS(3)
    Wichtig dabei ist, das Feld muss als Datumsfeld definiert sein und beim wandeln dar fauf keinem Fall die CVTOPT *DATETIME angegeben sein. Dann geht das so.

    Wenn das Feld als Alpha Feld definiert ist, müsste man wie folgt vorgehen
    (Es steht in einem 10A Feld 15.05.2015.
    Code:
    C                       EVAL AlphFeld = %CHAR(%DATE(AlphFLD:*EUR) + %YEARS(3):*EUR)
    Wieso klappt es denn bei dir nicht? Umwandlungsfehler?

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    17.537
    Und in Free siehts dann so aus (wie ich schon schrieb):

    datFeld += %YEARS(3);
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.220
    DATUM += %YEARS((2015 - %SUBDT(DATUM:*YEARS)))

    Zitat Zitat von camouflage Beitrag anzeigen
    ich möchte das Jahr auf einem vordefiniertem Datumsfeld ersetzen. z.B. 01.01.2000.
    Also aus 2000 soll 2015 werden. Und das in free. Allerdings, lange mach ich das nicht mehr mit.
    Dann halt mit Hilfsfeldern, schön geht anders.

  9. #9
    Registriert seit
    Jan 2007
    Beiträge
    509
    Vielen Dank für den vielen Feedback.

    Einige Ideen sind wirklich überlegenswert, aber aus Gründen der Uebersichtlichkeit diese Lösung angewendet:

    jjjj = (%subdt(%date:*YEARS)-3);
    work = '01.01.' + %char(jjjj);

    Work ist varchar und dann kann ich damit immer noch machen, was ich will.

    Danke euch.
    kf

  10. #10
    Registriert seit
    Apr 2005
    Beiträge
    355
    Achso du willst immer den 01.01. haben....
    dann ginge das so....

    Code:
    date1 = date1 - %YEARS(3) - %MONTHS(%SUBDT(DATE1:*M)-1) - %days(%SUBDT(DATE1:*D)-1) ;

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    17.537
    Ich habe mir da mal eine "DateSerial"-Funktion gebastelt (aus VBA):

    MyDate = %date('0001-01-01') + %Years(n - 1) + %Months(n - 1) + %days(n - 1);
    Der Vorteil dieser Basis-Funktion ist ebenso, dass "n" einen beliebigen Wert +/-, also auch 0 enthalten kann.
    Beispiel:

    MyDate = %date('0001-01-01') + %Years(2018 - 1) + %Months(6 - 1) + %days(0 - 1);
    Ergebnis => 2018-05-31

    Und somit lässt sich deine Anforderung auch relativ leicht ohne Hilfsvariablen rechnen:

    MyDate = %date('0001-01-01') + %years(%subdt(%date:*YEARS) - 2);

    PS:
    Die Funktion mittels dem "work = '01.01.' + %char(jjjj);" funktioniert nur, wenn das Datumformat des Programmes auf *EUR steht. Ich würde hier grundsätzlich *ISO empfehlen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. SQL BIF bei falschem Datum
    Von Peet im Forum NEWSboard programmierung
    Antworten: 3
    Letzter Beitrag: 06-10-17, 22:35
  2. SQL Datum
    Von dholtmann im Forum NEWSboard programmierung
    Antworten: 7
    Letzter Beitrag: 03-05-16, 09:35
  3. Jahr in Datum ersetzen (SUBDT)
    Von camouflage im Forum NEWSboard programmierung
    Antworten: 15
    Letzter Beitrag: 16-09-15, 12:28
  4. SQL Datum konvertieren
    Von weidenhammer im Forum NEWSboard programmierung
    Antworten: 1
    Letzter Beitrag: 07-05-15, 11:37
  5. Datum + 10 Tage in RPG
    Von HoScHiE im Forum System i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-08-01, 14:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •