[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2002
    Beiträge
    1.121

    Datum in SQL Funktion prüfen

    Hallo Gemeinde!

    Wie kann ich denn am besten/einfachsten Fehler in einer SQL-Funtion abfangen?
    Habe mir eine Funktion gebastelt, die aus 2 Numerichen 8selligen Felder (welche je mit einem gültigen Datum gefüllt sein sollten) die Differenz in Tagen aus gibt.
    Steht nun aber in einem Feld 20140931 fällt die Funtion auf die Nase.
    Ich würde nun gern in diesem Fall das die Funktion 0 oder 999999 zurück gibt.

    PHP-Code:
    Create Function MyLib/DAT_DiffDat1 Dec(80), Dat2 Dec(80) )
           
    Returns Decimal (60)                                    
           
    Language sql                                              
    Return                                                           
     
    Days(Date(SubStr(Digits(Dat1), 14Concat '-' Concat          
               SubStr
    (Digits(Dat1), 52Concat '-' Concat          
               SubStr
    (Digits(Dat1), 72) ))                         
    -
    Days(Date(SubStr(Digits(Dat2), 14Concat '-' Concat          
               SubStr
    (Digits(Dat2), 52Concat '-' Concat          
               SubStr
    (Digits(Dat2), 72) )) 
    Gruß
    Ronald

  2. #2
    Registriert seit
    Sep 2004
    Beiträge
    129
    Meines Wissens geht das mit

    declare EXIT HANDLER FOR SQLEXCEPTION return 0;
    Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!

  3. #3
    Registriert seit
    May 2002
    Beiträge
    1.121
    Danke!

    Das war es

    PHP-Code:
    Create Function MyLib/DAT_DiffDat1 Dec(80), Dat2 Dec(80) ) 
           
    Returns Decimal (60)                                     
           
    Language sql                                               
    Begin                                                             
    declare EXIT HANDLER FOR SQLEXCEPTION return 0;                   
    Return                                                            
     
    Days(Date(SubStr(Digits(Dat1), 14Concat '-' Concat           
               SubStr
    (Digits(Dat1), 52Concat '-' Concat           
               SubStr
    (Digits(Dat1), 72) ))                          
    -
    Days(Date(SubStr(Digits(Dat2), 14Concat '-' Concat           
               SubStr
    (Digits(Dat2), 52Concat '-' Concat           
               SubStr
    (Digits(Dat2), 72) ));                         
    end 

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das geht auch einfacher:

    days(date(char(Dat1 * 1000000))) - days(date(char(Dat2 * 1000000)))

    Die Funktion Date erlaubt auch einen Timestamp in der Form JJJJMMTTHHMMSS.
    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

  5. #5
    Registriert seit
    May 2002
    Beiträge
    1.121
    Gut werde ich umbauen.

    (aber das Beispiel hatte ich auch mal von dir ;-) )
    http://newsolutions.de/forum-systemi...erenz-in-Tagen

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Man lernt nie aus und SQL wird von Release zu Release besser. Das ISO-Datum galt noch für V4!
    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
    Feb 2001
    Beiträge
    20.241
    Nachtrag:
    Ich habe mir mal eine VBA-ähnliche Funktion gebaut:
    DATESERIAL(Year as integer, Month as Integer, Day as integer) as Date
    return date('0001-01-01') + (year - 1) Years + (Month - 1) months + (day - 1) days;
    Fehlerabfangen falls Über-/Unterlauf.

    Diese ist zum Rechnen manchmal ganz gut.
    Beispiel:
    Dateserial(Year(mydate), Month(Mydate) + 1, 0) = immer der Letzte des Monats
    Ich denke da gibt es immer wieder Anwendungen, auch z.B. bei alten Strukturen mit getrennten Datumfeldern.

    Ggf. kann man ja noch einen "case when Year < 100 then case when Year < 40 then year + 2000 else year + 1900 end else year end" einbauen um 2-stellige Jahre zu berücksichtigen (wie Microsoft auch).
    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. Prüfen, ob ein Objekt existiert
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 22
    Letzter Beitrag: 22-08-14, 11:43
  2. API QMHRCVM Prüfen ob Nachricht bereits beantwortet ist
    By oulbrich in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 18-11-13, 08:52
  3. TCP/IP Port prüfen
    By wdom in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-05-03, 13:58
  4. prüfen ob STMF in IFS-Verzeichnis vorhanden
    By CZE425 in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 23-10-02, 11:56
  5. TCP/IP FTP prüfen ob Rechner an ist
    By malzusrex in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-07-02, 10:07

Berechtigungen

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