PDA

View Full Version : Timestamp_format liefert Fehler



Peet
21-12-20, 12:50
Hallo,

ich bereite ein Datum aus einem numerischen Feld, gespeichert im Format JJMMTT, mit SQL auf.
Im Feld steht 001116, also 16.11.2000, ich habe es hier dann mal "von Hand" getestet !


select char(date(timestamp_format(char(001116),'RRMMDD')) ,eur) from sysibm.sysdummy1


Ich bekomme den Fehler CPF426B "Funktion TIMESTAMP_FORMAT kann nicht ausgeführt werden" mit Ursachencode "13 -- Die Zeitmarke kann von der angegebenen Formatierzeichenfolge nicht interpretiert werden."


Mache ich das mit "011116" bekomme ich als Ergebnis "06.11.2011" !!! ...also auch falsch, aber ich bekomme ein Result.

Auch wenn ich "RRMMDD" auf "YYMMDD" ändere, funktioniert es nicht !
Und wenn ich im IBM Knowledge Center den Hinweis zu "RR" bzw. "RRRR" lese, scheint genau die Verwendung von "RRRR" hier mein Problem zu sein.

Ich habe schon gesucht, finde aber keine Infos dazu.
Kann mir jemand helfen ???

Danke vorab und Vg.

B.Hauser
21-12-20, 13:08
Ich gehe mal davon aus, dass es sich bei 001116 eigentlich um eine Spalte im Format DEC(6, 0) handelt.
Wenn das so ist, musst Du den numerischen Wert mit Digits umsetzen.

Oder notfalls wie ich hier ein bisschen herumtricksen:

With x (NumDat) as (Values(Cast(1116 as Dec(6, 0))))
Select Timestamp_Format(Digits(NumDat), 'RRMMDD')
from x;

Anstatt mit CHAR und anderem hin-und her zu formatieren würde ich für den zweiten Schritt, d.h. die Ausgabe als Datum im europäischen Format mit VARCHAR_FORMAT arbeiten:

With x (NumDat) as (Values(Cast(1166 as Dec(6, 0))))
Select VarChar_Format(Timestamp_Format(Digits(NumDat), 'RRMMDD'), 'DD.MM.YYYY')
from x;

Birgitta

Peet
22-12-20, 09:47
Danke Birgitta !
Leider funktioniert es aber nicht...

Select VarChar_Format(Timestamp_Format(Digits(001116), 'RRMMDD'), 'DD.MM.YYYY')
from sysibm.sysdummy1

führt zum gleichen Fehler !!!

Während aber ...

With x (NumDat) as (Values(Cast(001116 as Dec(6, 0))))
Select VarChar_Format(Timestamp_Format(Digits(NumDat), 'RRMMDD'), 'DD.MM.YYYY') from x

zum korrekten Ergebnis führt !!!
Habe ich etwas übersehen ???

B.Hauser
22-12-20, 10:01
Das passiert, weil Du direkt eine Zahl angibst. Diese Zahl wird als Integer interpretiert.
Mit Digits wird daraus: '0000001166'
Mit Char wird daraus: '1166' plus 6 folgende Blanks
Und beides kann nicht konvertiert werden.

Wenn Du die Zahl dagegen explizit als Decimal(6, 0) castest, funktioniert es mit Digits.
Mit Char funktioniert es allerdings weiterhin nicht, da die Ziffern linksbündig ausgerichtet und dann mit *Blanks aufgefüllt werden.

Birgitta

Peet
22-12-20, 10:38
Hallo Birgitta,

ja, es ist wie du sagst :=)
Vielen Dank !

Frohe Weihnachten und alles Gute für 2021, Gesundheit, Glück und Zufriedenheit !!!

holgerscherer
22-12-20, 16:06
ja, es ist wie du sagst :=)


Man sollte ab und an auf die Damen hören ;-)

Fuerchau
22-12-20, 17:23
Nun, lesen der Betriebsanleitungen hilft da auch schon mal, durchaus;-).

Peet
22-12-20, 19:36
Nun, lesen der Betriebsanleitungen hilft da auch schon mal, durchaus;-).

Vollkommen überflüssig, deine arrogante Bemerkung !

malzusrex
23-12-20, 12:49
Nun, lesen der Betriebsanleitungen hilft da auch schon mal, durchaus;-).

Das habe ich mir auch schon manchnmal gesagt, nach dem man viel Zeit vergeudet hatte...
;-)

Liebe Grüße
Ronald

Fuerchau
23-12-20, 14:22
Ich weiß zwar nicht was Lesen mit Arroganz zu tun hat, aber das ist ja auch nur Meinung.
Allerdings, und das muss ich zugeben, muss aus den Bausteinen, die man durch Lesen erwirbt, letztlich jeder selber das richtige Bauwerk zimmern.
Und das nennt man dann Erfahrung.