-
DATE-Wert aus vier INT Werten JH, JJ, MM, TT
Hallo zusammen,
das verwendete WWS (nicht von uns) hat immer lustige vier Ganzzahlen Jahrhundert, Jahr, Monat, Tag.
Man kann das ganze nun in einen Date Wert umrechnen:
DATE(CAST(G1JHTB*100+G1JJTB as CHAR(4))||'-'||G1MMTB||'-'||G1TTTB)
Es tut, ich finds aber häßlich.
Daher die Frage:
Geht das irgendwie auch schicker?
Eventuell so in der Richtung: datexy(year, month, day).
Vielen Dank für alle Hinweise.
Michael Haufler
scireum GmbH - http://www.scireum.de
-
Es gibt schon andere Methoden, aber ob die unbedingt schicker sind?!
Aktuell kann SQL nur gültige alphanumerische Darstellungen eines Datums oder Zeitmarke konvertieren. Sofern SQL ein numerisches Datum konvertieren soll muss dieses (zumindest unter 7.1) der rechnerischen Anzahl der Tage seit dem 01.01.0001 entsprechen.
Die folgende Lösung könnte vielleicht etwas einfacher sein (allerdings nur wenn die Spalten gepackt oder gezont 2, 0 definiert sind. Sollte es sich um echte Integer-Werte handeln, müssen die numerischen Werte gecastet werden:
Code:
Date(Digits(G1JHTB) concat Digits(G1JJTB) concat
Digits(G1MMTB) concat Digits(G1TTTB) concat '000000')
Code:
Date(Right(Digits(G1JHTB), 2) concat Right(Digits(G1JJTB), 2) concat
Right(Digits(G1MMTB), 2) concat Right(Digits(G1TTTB), 2) concat '000000')
Um das ganze zu vereinfachen, kannst Du auch eine UTF (user defined function) schreiben und diese ausführen. Der Vorteil bei UDFs Du kannst fehlerhafte Daten abfangen.
Etwa so:
Code:
Create Function YOURSCHEMA/CVTHJMD2DT
(ParJHD Decimal(2, 0) ,
ParJJ Decimal(2, 0) ,
ParMM Decimal(2, 0) ,
ParTT Decimal(2, 0) )
Returns Date
Language SQL
Begin
Declare Continue Handler for SQLSTATE '22007'
Return Date('0001-01-01');
Return Date(Digits(ParJHD) concat Digits(ParJJ) concat
Digits(ParMM) concat Digits(ParTT) concat '000000');
End;
Aufruf der UDF:
Code:
Select CVTHJMD2DT(G1JHTB, G1JJTB, G1MMTB, G1TTTB)
From YourTable;
Birgitta
-
So als Beifang aus dem Netz...
SELECT CAST(CAST(G1JHTB + 19000000 AS VARCHAR) AS DATETIME)
(ungeprüft und ohne Garantie)
in RPG würd's dann so aussehen:
dcl-s ISODATE Date(*ISO)
ISODATE = %Date(G1JHTB: *CYMD)
kf
-
... kommt drauf an was man unter chic versteht. Für mich wäre chic, wenn die Tabellen ein Datumsfeld verwenden, wenn ein Datum gespeichert werden soll.
Das zweit chicste wäre, wenn es jeweils eine View gäbe, die mir diesen Unfug vom Hals hält, wie die View das macht, könnte mir dann egal sein, wenn es denn stimmt, wenig Strom kostet und schnell ist.
Die UDF Lösung sieht dafür auf den ersten Blick sehr schön aus, hat aber einen wesentlichen Haken, das ist nicht schnell und kostet viel Strom, weil es mir viele Table Scans einbringt, wenn die Datumsfelder in where und/oder join Klauseln verwendet werden. Deshalb würde ich da eher eine zusätzliche Translation table vorsehen, die hat ein richtiges Datum als Keyfeld und dann die vier Ganzzahlen als columns (zusätzlich kann die noch Felder für Ultimo, Quartal, Eier Woche haben); selbige muss natürlich für alle vorkommenden Daten gefüllt sein. Letzteres hört sich kompliziert an, aber wenn ich dir für 100 Jahre mit allen Daten fülle sind das < 40.000 Sätze und dürfte für die meisten kommerziellen Anwendungen reichen.
D*B
Similar Threads
-
By Moonwalker in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 15-12-13, 15:23
-
By Frank Hildebrandt in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 01-04-03, 11:43
-
By Melanie in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 13-02-03, 10:30
-
By DiBagger in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 13-09-02, 12:41
-
By EDV-NEW-MEDIA in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 09-04-02, 11:40
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks