[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    82

    arbeitet %diff richtig?

    Hallo *ALL,

    ich habe eine Frage zur Funktion %diff...

    Monate = %diff('2008-09-30':'2008-08-31':*MONTHS)

    Meiner Meinung nach sollte in Monate jetzt eine 1 stehen, weil vom letzten eines Monats bis zum letzten des Folgemonats ist für mich genau 1 Monat.
    Die Funktion gibt mir jedoch 0 zurück.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Works as designed!

    Es wird immer abgerundet und nicht kaufmännisch gerundet. Zwischen dem 31.08. und 30.09. liegt kein voller Monat der wäre erst mit dem theoretischen 31.09 erreicht.

    Da abgerundet wird erhälst Du 0.

    Hier der entsprechende Passus aus der RPG Reference für die Built-in-Function %DIFF().
    The result is rounded down, with any remainder discarded. For example, 61 minutes is equal to 1 hour, and 59 minutes is equal to 0 hours.
    Außerdem eine Differenz in Monaten zu rechnen ist schon ziemlich heikel. Einmal hat ein Monat 30 Tage, einmal 31 oder auch 28 oder 29 Tage. Für statistische Zwecke werden alle Monate mit 30 Tagen angesetzt.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Das ist ja cool. Wenn man zum 31.08.2008 einen Monat dazuzählt, erhält man den 30.09.2008. Und wenn man davon wieder einen Monat abzieht, erhält man den 30.08.2008.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    das muss man einfach nur glauben, schließlich wurde unser Kalender von Päpsten gemacht.


    Zitat Zitat von Pikachu Beitrag anzeigen
    Das ist ja cool. Wenn man zum 31.08.2008 einen Monat dazuzählt, erhält man den 30.09.2008. Und wenn man davon wieder einen Monat abzieht, erhält man den 30.08.2008.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das ist ja cool. Wenn man zum 31.08.2008 einen Monat dazuzählt, erhält man den 30.09.2008. Und wenn man davon wieder einen Monat abzieht, erhält man den 30.08.2008.
    Das ist aber auch dokumentiert!!

    Deshalb gibt es ja z.B. auch seit V5R4 die SQL-Funktion ADD_MONTHS. Wenn bei dieser Funktion das Ausgangsdatum ein Monatsende ist, ist auch das Ziel-Datum ein Monats-Ende. Ansonsten funktioniert die Funktion genauso wie wenn nur eine Anzahl Monate addiert wird.

    Beim folgenden SQL-Statement ist das Ergebnis 31.08.2008.
    PHP-Code:
    select add_months(add_months(date('2008-08-31'), 1), -1)
    from sysibm/sysdummy1 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Arbeitet man heute noch mit Pointern?
    By cicero22 in forum NEWSboard Programmierung
    Antworten: 15
    Letzter Beitrag: 30-10-06, 12:56
  2. Antworten: 13
    Letzter Beitrag: 15-11-05, 17:52
  3. PTF nicht richtig installiert
    By ukoh19 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 24-01-05, 07:18
  4. Kennwort falsch, obwohl richtig
    By Kent in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 08-09-04, 09:06
  5. SQLGetData richtig aufrufen
    By sim in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 17-08-04, 14:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •