[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2011
    Beiträge
    94

    SQL TO_DATE(CHAR(CAST

    Hallo

    ich habe ein Problem mit folgender SQL Anweisung:


    PHP-Code:
    Select     
      year
    (TO_DATE(CHAR(CAST(num80 AS DECIMAL(8,0))), 'YYYYMMDD'))   as Jahr,
      
    month(TO_DATE(CHAR(CAST(num80 AS DECIMAL(8,0))), 'YYYYMMDD'))   as Monat
    from bibliothkek
    .daten 
    führe ich diese Anweisung in IBM DataStudio oder SQuirrel läuft alles einwandfrei.

    Lasse ich die Anweisung über den GreenSrcren oder als Embedded SQL im RPG laufen kommt es zu einem Fehler.

    PHP-Code:
    Token ungültigGültige Token: )
    year(TO_DATE(CHAR(CAST(num80 AS DECIMAL(8,0))), 'YYYYMMDD'))   as Jahr,
      
    month(TO_DATE(CHAR(CAST(num80 AS DECIMAL(8,0))), 'YYYYMMDD'))   as Monat
    from bibliothkek
    .daten 
    es wird die dritte 5 Klammer direkt nach DECIMAL angemeckert.

    year(TO_DATE(CHAR(CAST(num80 AS DECIMAL(8,0)))

    Hat da jemand eine Erklärung oder eine besser Vorgehensweise wie man aus einem 8 Stellig nummerischem Feld, welches ein Datum enthält, Jahr, Monat und Tag extrahiert?


    Bin für jede Antwort dankbar.

    oulbrich

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Grund ist das Dezimalkomma!
    Mach ein Leerzeichen vor oder nach dem Komma da sonst der Wert als 8,0 und nicht als 2 Werte interpretiert wird.
    Wobei mir der Cast als überflüssig erscheint.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2011
    Beiträge
    94
    Hat geklappt. Besten Dank. Die Cast Funktion brauche ich um aus dem Num80 Feld ein CHAR zu erstellen da die TO_DATE Funktion nur mit CHAR Daten funktioniert.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Wenn das Datum als numerisches Datum definiert ist, warum zunächst in eine Zeitmarke konvertieren, um dann daraus das Jahr zu ermitteln?

    Hier einige einfachere Möglichkeiten (vorausgesetzt, das numerische Datum ist 8,0 definiert):
    • Substr(Digits(Datum), 1, 4)
    • Year(Digits(Datum) concat '000000')
    • Int(Datum/10000)
    • Left(Digits(Datum), 4)



    Die letzten beiden Variante klappen nur für das Jahr.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Der CAST(NUM as DECIMAL...) ist Blödsinn, da ein CHAR(NUM) das selbe Ergebnis liefert wie ein CHAR(DEC).
    DIGITS ist die Sonderform von CHAR und liefert nur die Zahlen, kein Vorzeichen, kein Dezimalkomma/-punkt und immer mit Vornullen, während CHAR eine "Zahlaufbereitung" vornimmt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Cast & when Syntax Frage
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-01-15, 19:13
  2. Zeitstempel mit CHAR-Feld vergleichen
    By harbir in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 02:29
  3. CAST(SUM(SUBSTR
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 05-05-14, 16:42
  4. %char ??
    By Gimli in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 04-03-03, 15:20
  5. Char-Feld 4-stellig, per SQL nur 1. Stelle ändern
    By LGALF in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 05-07-01, 17:09

Berechtigungen

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