Anmelden

View Full Version : arbeitet %diff richtig?



cimbala
24-10-08, 09:11
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.

B.Hauser
24-10-08, 10:22
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

Pikachu
24-10-08, 10:35
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.

BenderD
24-10-08, 11:06
das muss man einfach nur glauben, schließlich wurde unser Kalender von Päpsten gemacht.



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.

B.Hauser
24-10-08, 11:10
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.

select add_months(add_months(date('2008-08-31'), 1), -1)
from sysibm/sysdummy1

Birgitta