View Full Version : extract timestamp in num. Feld
hallo *all
ich benötige aus einem TimeStamp Feld (=Dantenbank mit SQL erstellt) nur das Datum und dieses in einer 8 stelligen RPG Variablen
Datum:
2007-04-24-10.48.20.000000
in der RPG-Variablen sollte dann folgendes stehen:
20070424
kann ich das irgendwie mit EVAL .... auslesen/übertragen?
JJJJMMTT =
%dec(%char(%date(MyTimeStamp):*iso0):8:0)
TTMMJJJJ =
%dec(%char(%date(MyTimeStamp):*eur0):8:0)
D DatumX s 8 0 inz(0)
DatumX = %dec(%char(%date(DATUM):*ISO0):8:0);da bekomm ich dann aber immer folgenden Fehler:
Datums-, Zeit- oder Zeitmarkenwert ist ungültig (C G D F).
JJJJMMTT = %Dec(%Date(MyTimestamp): *ISO);
Sollte eigentlich reichen. Eine zusätzliche Konvertierung in eine alphanumerische Darstellung (%CHAR) ist nur erforderlich, wenn Du noch nicht auf Release V5R3 bist.
Vor Release V5R3 kann auch %DEC() durch %INT ersetzt werden (dann müssen weder Länge noch Nachkommastellen angegeben werden:
JJJJMMTT = %Int(%Char(%Date(MyTimeStamp): *ISO0));
... bist Du sicher, dass DATUM eine gültige Zeitmarke enthält?
Birgitta
@Birgitta
es kommt die selbe Fehlermeldung
sicher bin ich mir nicht, aber ich geh mal davon aus! :rolleyes:
Feld sieht wie folgt aus und ist wie folgt beschrieben:
DATUM:
2010-04-19-13.57.08.000000
Name von bis Länge Dat.Art E/A Bezeichnung
DATUM 47 72 26 Z B
Wenn ich nicht mit %char(Datum:*iso0) arbeite, kommt bei mir auch immer der Fehler.
Alternativ geht aber auch:
%subdt(Datum:*years) * 10000 + %subdt(Datum:*months) * 100 + %subdt(Datum:*days)
Es gibt wie immer mehrere Möglichkeiten.
In SQL arbeite ich genauso:
year(Datum) * 10000 + month(Datum) * 100 + day(Datum)
Achja, noch zu wissen:
Eine Zeitmarke ist immer im ISO-Format.
Ein Datum ist immer im angegeben Datumformat der H-Zeile (DATFMT, default ist glaube ich *dmy oder *eur) .
Ggf. kann daher %dec(%date(Datum)) nicht umwandeln.
Durch die genaue Angabe
%char(%date(Datum):*iso0)
ist man dann auf der sicheren Seite, unabhängig von der H-Definition.
EVAL JJJJMMTT = %DEC(
%SUBST(%CHAR(ZEITMARKE):1:4)
+ %SUBST(%CHAR(ZEITMARKE):6:2)
+ %SUBST(%CHAR(ZEITMARKE):9:2):8:0)
hab jetzt mal folgendes probiert,
aber leider hat keine dieser Varianten funktioniert! :mad: :(
H Option(*SrcStmt : *NoDebugIO) Datedit(*DMY) DatFmt(*ISO)
H DftActGrp(*No)
D DatumX s 8 0 inz(0)
DatumX = %uns(%char(%date(DATUMA:*DMY):*ISO0));
DatumX = %uns(%char(%date(DATUM:*ISO):*ISO0));
DatumX = %dec(%char(%date(DATUM):*ISO0):8:0);
DatumX = %dec(%char(%date(DATUM):*eur0):8:0);
DatumX = %int(%char(%date(DATUM): *ISO0));
DatumX = %DEC(
%SUBST(%CHAR(Datum):1:4)
+ %SUBST(%CHAR(Datum):6:2)
+ %SUBST(%CHAR(Datum):9:2):8:0);
Eine Zeitmarke in einer externen Datei wird wie es aussieht als alphanumerisches Feld A(26) ins RPG-Programm hereingeholt, sieh mal in der Umwandlungsliste nach.
Probier dann mal so:
EVAL DATUMX = %DEC(%SUBST(DATUM:1:4)
+ %SUBST(DATUM:6:2)
+ %SUBST(DATUM:9:2):8:0)