[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    385

    sql und datum ....

    brauche ne abfrage auf <= morgen

    habe

    JJJJ 2020
    MM 07
    TT 10

    current_date 10-07-20


    (das solls mal werden)

    Select * from datei where Date(jjjj*10000+mm*100+TT) <= (current_date+1 Day)

    Die verschiedene Bsp hier im Forum funktionieren nicht
    V7R3
    Danke
    Der ILEMax

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Hier 2 Varianten, die funktionieren (vorausgesetzt JJJJ ist 4,0 und MM und DD sind 2,0 definiert):

    Code:
    Date(Digits(JJJJ) concat Digits(MM) concat Digits(TT) concat '000000') 
    Date(Right(Digits(JJJJ * 10000 + MM * 100 + TT) concat '000000', 14))
    ... und hier noch eine andere Variante (wenn Du mit Release 7.2 oder höher arbeitest:
    Code:
    Select ...
       from ...
    Where (JJJJ * 10000 + MM * 100 + TT) >= Dec(Current_Date + 1 Day, 8, 0);
    Anstatt das Vergleichsdatum im SELECT-Statement zu berechnen, solltest Du an dieser Stelle besser eine Host-Variable mit dem berechneten Ergebnis verwenden.

    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

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn man mag, kann man das ganze auch mit Regex machen:

    Code:
    Select ...
    Where date(regexp_replace(varchar(JJJJ) || '-' || varchar(MM) || '-' || varchar(TT), '([0-9]+)-([0-9]+)-([0-9]+)', '$1-$2-$3')) <= current_date+1 Day
    lg Andreas

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Du solltest aber auch daran denken, dass bei den Regular Expressions alles in DBCLOBs konvertiert, was sich doch sehr negativ auf die Performance auswirken kann.
    Ebenso sollte man auch die Double Pipe vermeiden (da nicht international!) und stattdessen CONCAT verwenden.

    ... es gibt natürlich noch einiige andere Möglichkeiten ein (numerisches) Datum zu konvertieren.

    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
    Mar 2002
    Beiträge
    5.286
    ... wobei Lösungen mit date(Huddledatum) oder date(verhudelltes(Huddledatum)) tückisch sind, weil JJJJ und MM und TT und andere Huddledatumsvarianten kein gültiges Datum sein müssen (ich weiß: Bei uns sind die sauber, waren sie aber in > 95% der Fälle nicht!!!). Besser ist da schon eine Datumsdatei zum umsetzen aller benötigten Verhuddelungen (ist meist sogar schneller), die man zu joined (dafür sind Views da, am besten ist ein echtes Datumsfeld (kann auch für Huddle-Anwendungen zusätzlich und im LF/view weggelassen und mit Trigger gepflegt sein).
    Statt der Rechnerei (10000* + 100 * +...)kann man das auch in die where clause packen )select ... where jjjjFeld < jjjjWert or (jjjjFeld = jjjjWert and mmFeld < mmWert) or (jjjjFeld = jjjjWert and mmFeld = mmWert and ttFeld <= ttWert), was für Optimizer und Query engine vorteilhaft sein könnte.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Oder, was wir auch schon bei Kunden eingesetzt haben, eine SQL-Function, die bei Fehlern dann NULL zurückgeben.
    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

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... Problem ist auch hier, dass der Optimizer nicht in die Funktion reinsehen kann. Was man hier nur tun kann, ist: die Funktion cachen lassen oder enstprechend kennzeichnen und nach Huddledatum sortieren. Will man das Resultset allerdings nach Kunde oder Artikel sortieren, geht das wieder nicht.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    385
    @Birgitta
    Deine 2. Variante funktioniert!
    Hostvariable in einer Runsql Source kann ich nicht

    Danke
    Der ILEMax

Similar Threads

  1. Query Datum
    By Zuther in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 06-12-18, 13:51
  2. SQL BIF bei falschem Datum
    By Peet in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-10-17, 23:35
  3. SQL Datum
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 03-05-16, 10:35
  4. SQL Datum konvertieren
    By weidenhammer in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 07-05-15, 12:37
  5. Datum + 10 Tage in RPG
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-08-01, 15:47

Berechtigungen

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