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 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.
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
Hallo.
Danke für die ausführlichen Infos.
Gruß Joe