PDA

View Full Version : Jahr im Datum ändern - steh auf dem Schlauch



Seiten : [1] 2

camouflage
04-07-18, 10:31
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.

Pikachu
04-07-18, 11:05
Probiers mal mit SUBDUR (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzasd/zzsdur.htm#zzsdur) (*YEARS oder *Y) oder %YEARS (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/bbyear.htm#bbyear). (Datumsoperationen (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_73/rzasd/yydate.htm#yydate))

Robi
04-07-18, 11:05
Wenn es nicht *free sein muß ...
DT1 und DT2 sind hier Datum Felder *EUR


C z-add 3 anz
C DT1 SUBDUR anz:*Y DT2

Fuerchau
04-07-18, 11:08
Wie wärs mit:

eval MyDate += %years(3)

bzw. in free:

MyDate += %years(3);

camouflage
04-07-18, 11:49
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.

ExAzubi
04-07-18, 12:06
Wo ist das Problem? Wenn das Feld als Datumsfeld definiert ist, geht es so



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.


C EVAL AlphFeld = %CHAR(%DATE(AlphFLD:*EUR) + %YEARS(3):*EUR)


Wieso klappt es denn bei dir nicht? Umwandlungsfehler?

Fuerchau
04-07-18, 12:22
Und in Free siehts dann so aus (wie ich schon schrieb):

datFeld += %YEARS(3);

Pikachu
04-07-18, 12:40
DATUM += %YEARS((2015 - %SUBDT(DATUM:*YEARS)))


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.

camouflage
04-07-18, 13:07
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.

ExAzubi
04-07-18, 13:34
Achso du willst immer den 01.01. haben....
dann ginge das so....



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