[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Jan 2007
    Beiträge
    1.015
    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

Similar Threads

  1. SQL CAST als Datum bei fehlerhaften Werten
    By Moonwalker in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 15-12-13, 16:23
  2. CPW-Wert Prozessor Feature
    By Frank Hildebrandt in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 01-04-03, 12:43
  3. Typ DATE in SQL-Tabelle
    By Melanie in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 13-02-03, 11:30
  4. Datei mit Hex-Werten in RPG verarbeiten
    By DiBagger in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-09-02, 13:41
  5. ASCII Wert für Datenfreigabe
    By EDV-NEW-MEDIA in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-04-02, 12:40

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •