[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    jjjj + mm +tt mit sql 5 tage drauf

    Hi *all

    ich habe in einer Datei das Datum in form von 3 Feldern.

    jjjj, mm und tt

    in einer View will ich nun auf das Datum 5 Tage drauf rechnen.
    Das ergebnis brauche ich aber als ein Numerisches Feld jjjjmmtt
    bisher habe ich ...

    date((digits(jjjj) CONCAT '-' CONCAT digits(mm) CONCAT '-' CONCAT
    digits(tt))-DAYS(5)

    Das bekomme ich z.zt. nicht zurück in ein jjjjmmtt Feld

    Danke
    Der ILEMax

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.258
    Wiederum per Cast:

    dec(replace(char(DateAusdruck, iso), '-', ''), 8, 0)

    Zur Datumsrechnung gilt:

    +/- n days | months | years
    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
    Aug 2001
    Beiträge
    2.879
    Sofern Du auf Release 6.1 oder höher bist, kannst Du den ganzen Ausdruck (zusammensetzen Felder, Konvertieren in Datum, 5 Tage addieren, Konvertieren in Numerisches Datum) auch wie folgt aufbauen:

    Code:
    Dec(VarChar_Format(Timestamp(Digits(Jahr)  concat 
                                 Digits(Monat) concat 
                                 Digits(Tag)   concat '000000') + 5 Days, 
                       'YYYYMMDD'), 
        8, 0)
    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

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    393
    ok, danke.
    habe mein -days(5) in -5 days geändert.

    Code:
    dec(replace(char(                                                      
    date((digits(jjjj) CONCAT '-' CONCAT digits(mm) CONCAT '-' CONCAT
    digits(tt)))-5 DAYS                                                
                      ), '-', ''), 8, 0) AS DATUM,
    geht aber nicht.
    Ursache schein zu sein, das

    Code:
    SELECT date(digits(JJJJ) CONCAT '-' CONCAT digits(MM) CONCAT
    '-' CONcat digits(TT))-5 DAYS AS DATUM,                       
    JJJJ*10000+MM*100+TT FROM DATEI
    BRINGT

    Code:
    16.09.95    19950621
    also richtig gerechnet aber Datum in Form tt.mm.jj

    der replace und das Dec 8,0 kann da ja nicht funktionieren

    noch ne Idee?
    Der ILEMax

  5. #5
    Registriert seit
    Sep 2005
    Beiträge
    393
    ok, das ISO kam aber später oder??

    (Danke)

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    393

    Fast gut

    leider gibt es auch jjjj mm und tt Felder die leer sind.
    Um das abzufangen habe ich nun

    Code:
    SELECT dec(coalesce(replace(char( date(digits(jjjj) CONCAT '-'   
    CONCAT digits(mm) CONCAT '-' CONcat digits(tt))-5 DAYS ,   
    iso), '-', ''), 0), 8, 0) AS DATUM, jjjj*10000+mm*100+tt 
    FROM datei
    drumherum gebaut

    das bringt aber bei den leeren jjjj Feldern zrotzdem in der Anzeige nur +++++

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    393

    auch in Birgittas version

    Code:
    SELECT Dec(coalesce(VarChar_Format(Timestamp(Digits(jjjj) concat  
    Digits(mm) concat Digits(tt) concat '000000')+ 5 Days ,     
    'YYYYMMDD'), 0), 8, 0) , jjjj*10000+mm*100+tt FROM datei

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.258
    Ungültige Daten kann man da leider nicht in ein Datum umsetzen, dass kannst du nur mit einem Case-Ausdruck eingrenzen.

    Zusätzlich passiert ja noch folgendes:
    Im STRSQL, also Dialog, schafft SQL es diese Daten dann zu überlesen.
    Im embedded SQL geht das nur, wenn du NULL-Anzeiger verwendest, ansonsten kommt ein Fetch nicht über den fehlerhaften Satz hinaus.

    Solange du sicher sein kannst, dass in den Daten, wenn sie <> 0 sind, nur gültige Daten drinn stehen, kannst du einen Case-Ausdruck verwenden:

    case
    when JJJJ <> 0 and MM <> 0 and TT <> 0
    then DateAusdruck
    else NULL
    end

    Auch hier benötigst du natürlich bei embedded SQL einen NULL-Anzeiger.

    PS:
    ISO kam tatsächlich erst beim Edit, das das Datumformat bei mir in STRSQL immer auf *ISO steht.
    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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.258
    Ach übrigens:

    man kann auch folgendes kodieren:

    date('0001-01-01') + (JJJJ - 1) years + (MM - 1) months + (TT - 1) days

    Das liefert dir dann immer ein gültiges Datum.
    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

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    393
    Sowas hatte ich auch kurz überlegt aber ...
    knallt der nicht, wenn ich - 5 days rechne ?

    Der ILEMax

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.258
    Nun ja, dann nimm ein anderes Jahr und rechne dieses wieder runter:

    date('1900-01-01') + (case JJJJ when 0 then 0 else -1900 end) years + (MM - 1) months + (TT - 1) days

    Ob das dann ein sinnvolles Datum ist ...
    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

  12. #12
    Registriert seit
    Sep 2005
    Beiträge
    393
    knallt auch ....

    Code:
    SELECT dec(coalesce(replace(char( date('0001-01-01') +           
    (dec(digits(jjjj), 4, 0)-1) years +                              
    (dec(digits(mm), 2, 0)-1) month +                                
    (dec(digits(tt), 2, 0)-1) days - 5 days, iso                     
    ), '-', ''), 0), 8, 0) AS DATUM, jjjj*10000+mm*100+tt from datei

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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