PDA

View Full Version : Datumsproblem



Joe
25-08-05, 12:42
Hallo Forum.

Ein Datumsfeld Typ Date enthält den Wert 31.12.1899

Anzeige bei DSPPFM: 1899-12-31
Anzeige im interakt. SQL: ++++++++++

Abfrage im intarakt.SQL ist möglich:
..select where Datum = '31.12.1899'


Im SQLRPGLE bringt
Select * into :DS from Datei...

einen Datenumsetzungsfehler der sich auf das Datumsfeld bezieht.


Ich habe mal mit verschieden Werten probiert und stelle fest,
das ein Datum ab 01.01.1940 akzeptiert wird.

In der DB2 UDB Reference wird bei Date unter Limits
eine Range von 01.01.0001 31.12.9999 angegeben.

Gibt es da irgendwo Einstellmöglichkeiten?

BS = V5R3M0

Gruß Joe

Fuerchau
25-08-05, 13:15
Das Datum wird bei der Anzeige im 6-stelligen Format verwendet, was natürlich zu Fehlern führt, da 6-stellige Datümer nur vom 1.1.1940 - 31.12.2039 gehen.
Im SQLRPG/LE muss ich das ISO-Format (10-Stellig JJJJ-MM-TT) verwenden, um auch andere Datümer zu verwenden.

B.Hauser
25-08-05, 13:49
Hallo Forum.

Ein Datumsfeld Typ Date enthält den Wert 31.12.1899

Anzeige bei DSPPFM: 1899-12-31
Anzeige im interakt. SQL: ++++++++++

Abfrage im intarakt.SQL ist möglich:
..select where Datum = '31.12.1899'


Im SQLRPGLE bringt
Select * into :DS from Datei...

einen Datenumsetzungsfehler der sich auf das Datumsfeld bezieht.


Ich habe mal mit verschieden Werten probiert und stelle fest,
das ein Datum ab 01.01.1940 akzeptiert wird.

In der DB2 UDB Reference wird bei Date unter Limits
eine Range von 01.01.0001 31.12.9999 angegeben.

Gibt es da irgendwo Einstellmöglichkeiten?

BS = V5R3M0

Gruß Joe

Das ist eine Restriction von RPG und dem Pre-Compiler!
Das Datums-Format, das das eingebettete SQL verwendet, ist das Format, das im Compile-Befehl (Option DATFMT) angebeben wird. Der Default-Wert ist *JOB und das Job-Datum hat nur ein 2-stelliges Jahr.

Du hast 2 Möglichkeiten:
1. Beim Compile-Befehl das Format auf ein Format mit 4-stelligem Jahr (ISO, EUR, USA, JIS) zu setzen
2. Ein Set Option-Statement einzubinden, in dem das Datums-Format mit 4-stelligem Jahr angeben wird.
C/EXEC SQL Set Option DatFmt = *ISO
C/END-EXEC

Die Datums-Formate, die in den D-, F, oder H-Bestimmungen hinterlegt sind, werden nicht berücksichtigt.

Der PreCompiler generiert für jede verwendete Host-Variable eine zusätzliche Variable. Bei Datums-Feldern erhalten diese Variablen das Format, das im Compile-Befehl oder im Set Option Statement hinterlegt ist.

Dies muss auch berücksichtigt werden, wenn z.B. ein Datums-Feld mit *LOVAL gefüllt wird. Bei einem Datums-Format mit 4-stelligem Jahr ist *LOVAL 0001-01-01 und *HIVAL 9999-12-31, bei einem Datums-Format mit 2-stelligem Jahr ist *LOVAL 1940-01-01 und *HIVAL 2039-12-31.

Birgitta

Birgitta

Joe
26-08-05, 09:11
Hallo.

Danke für die ausführlichen Infos.

Gruß Joe