PDA

View Full Version : SQL Umsetzung DATE in 6 bzw. 8 stelliges Datum



Seiten : [1] 2

beegee
17-12-08, 12:06
Hallo,

ich habe ein Problem mit Datumsfeldern, die mit SQL von einer iSeries-Datenbank aufgerufen werden.

Die Datenbankfelder sind als L-Felder mit DATFMT(*EUR) definiert.
In unseren Java-Sourcen rufen wir per SQL die Datensätze aus der iSeries ab und die Datumsfelder werden immer mit TT.MM.JJ, also mit einem 2-stelligen und nicht 4-stelligen Jahr zurückgegeben.

Wie schaffen wir es im SQL, dass das Datum 8-stellig bzw. mit 4-stelligem Jahr zurückkommt?

Lg

Fuerchau
17-12-08, 12:15
Wenn du mit Java (bzw. SQL) darauf zugreifst, liegt es an dir selber, wie du das Feld für die Ausgabe formatierst.
Das Feld ist vom Typ Date und enthält immer das vollständige Datum.
Schau mal, was Java so an Formatierungsoptionen bereithält.

Das DATFMT(*EUR) interressiert SQL nämlich nicht, sondern dient nur als Kommentar.
Einzig bei einer Referenz aus einer DSPF/PRTF wird das Format übernommen, was aber auch mit einem eigenen Format wieder überschrieben werden kann.

BenderD
17-12-08, 12:52
das lässt sich über Treiber Properties einstellen, ohne Angabe zieht da der SYSVAl, der meist auf DMY oder irgend sonem Tünnef steht.

D*B


Hallo,

ich habe ein Problem mit Datumsfeldern, die mit SQL von einer iSeries-Datenbank aufgerufen werden.

Die Datenbankfelder sind als L-Felder mit DATFMT(*EUR) definiert.
In unseren Java-Sourcen rufen wir per SQL die Datensätze aus der iSeries ab und die Datumsfelder werden immer mit TT.MM.JJ, also mit einem 2-stelligen und nicht 4-stelligen Jahr zurückgegeben.

Wie schaffen wir es im SQL, dass das Datum 8-stellig bzw. mit 4-stelligem Jahr zurückkommt?

Lg

Fuerchau
17-12-08, 14:51
Aber Dieter, diese Antwort hätte ich nun nicht von dir erwartet.
Auch die AS/400 liefert in SQL den Feldtyp Date an die Anwendung (in Java halt als Date).

Ich kann den Inhalt des Resultsets doch dem Typ java.util.Date zuweisen und dann per getYear, getMonth und getDay eigene Formatierungen durchführen oder eben direkt als Feld verwenden.

Das funktioniert auch mit den SQL-Typen Time und Timestamp.

Mit Treibereinstellungen hat das doch nichts zu tun.

BenderD
17-12-08, 15:04
IBM System i - IBM Toolbox for Java: JDBC FAQ (http://www-03.ibm.com/systems/i/software/toolbox/faqjdbc.html#faqB5)



Aber Dieter, diese Antwort hätte ich nun nicht von dir erwartet.
Auch die AS/400 liefert in SQL den Feldtyp Date an die Anwendung (in Java halt als Date).

Ich kann den Inhalt des Resultsets doch dem Typ java.util.Date zuweisen und dann per getYear, getMonth und getDay eigene Formatierungen durchführen oder eben direkt als Feld verwenden.

Das funktioniert auch mit den SQL-Typen Time und Timestamp.

Mit Treibereinstellungen hat das doch nichts zu tun.

Fuerchau
17-12-08, 17:29
Das betrifft aber nur Date's, die als String verarbeitet werden "select char(date) ..." oder "... where mydate = 'tt.mm.jj' ...".
Sobald ich Felder oder Parametermarker vom Typ Date verwende oder als Konstante das ISO-Format benutze (... where mydate = 'JJJJ-MM-TT' ...) gilt das nicht mehr.

BenderD
17-12-08, 17:42
... wandeln kann man das vorwärts und rückwärts, ich bin mir nur nicht so ganz sicher, was dabei mit den Gültigkeitsbereichen passiert... ich würde das schon eher auf iso umstellen, dann passt in jedem Fall alles.

D*B


Das betrifft aber nur Date's, die als String verarbeitet werden "select char(date) ..." oder "... where mydate = 'tt.mm.jj' ...".
Sobald ich Felder oder Parametermarker vom Typ Date verwende oder als Konstante das ISO-Format benutze (... where mydate = 'JJJJ-MM-TT' ...) gilt das nicht mehr.

Fuerchau
17-12-08, 18:34
Ich habe das mit deinem TransferData ausprobiert.
Auf Grund des Typs "Date" gabs keine Übertragungs- oder darstellungsprobleme.

BenderD
17-12-08, 19:16
... da wird schnöderweise getObject verwendet und die Reference an das PreparedStatement weitergereicht, dann muss das mit getDate genauso funzen.

D*B


Ich habe das mit deinem TransferData ausprobiert.
Auf Grund des Typs "Date" gabs keine Übertragungs- oder darstellungsprobleme.

beegee
18-12-08, 07:30
Guten Morgen,

tja, ich will ja keinen Streit auslösen :) , aber der Eintrag beim Treiber war richtig. Wir haben einzig den Parameter
"date format=eur" in den options hinzugefügt .... und das wars.

Danke.