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

    jjjjmmtt in SQL funktion week

    Hi.
    in der DB steht ein Datum als Numerischer Wert in der Form JJJJMMTT.

    Interaktives SQL, V5R4

    Select week(feld) from datei
    ->Argument 1 der Funktion WEEK ungültig.

    Select week(char(feld)) from datei
    -> ++++++++

    Select week(date(feld)) from datei
    -> ++++++++

    muß ich das Feld auseinander bauen umd mit '-' in die form jjjj-mm-tt bringen

    das muß doch einfacher gehen ?!

    danke
    Max

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das ist leider korrekt:

    date(substr(digits(feld), 1, 4) || '-' || substr(digits(feld), 5, 2) || '-' concat(substr(digits(feld), 7, 2))
    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.928
    Hallo,

    um die skalare Funktion Week oder Week_ISOzu verwenden, musst Du ein Datumsfeld, eine Zeitmarke oder eine gültige alphanumerische Darstellung verwenden. Gültige alphanumerische Darstellungen sind 'JJJJ-MM-TT', 'TT.MM.JJJJ', 'MM/TT/JJJJ'.

    Wenn Du die Kalenderwoche nach ISO Richtlinien (Woche beginnt mit Montag und die Mehrzahl des neuen Jahres muss in Kalenderwoche 1 liegen, d.h. der 31.12. kann in KW1 liegen bzw der 01.01. kann in KW 53 liegen) ermitteln willst, solltest Du die Funktion WEEK_ISO verwenden. Bei WEEK ist der 1. Januar immer in KW1!

    Die einzige Variante, die mir sonst noch einfällt, um ein numerisches Datum zu verwenden ist:
    PHP-Code:
    select week_iso(Timestamp(Digits(DatNumconcat '000000')) 
    from MyTable 
    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

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    425
    Danke euch Beiden,
    so ist zumindest die schreibweise kürzer, das hilft schon.
    week und week_iso kenn ich, auch der date(substr(digits ... ist bekannt (das fand ich ja so schrecklich).

    Kannst du das etwas zur performance sagen
    Timestamp vs date(substr(digits..

    Wenn ich den Begriff als group brauche oder als where ...
    Ich dachte das geht mit ... as woche
    where woche = ... group by woche

    aber das geht auch nicht, gibt es da noch einen trick (ausser ne funktion)

    Danke
    Max
    Last edited by ILEMax; 14-11-08 at 16:01. Grund: performance frage

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Trick 1:
    In Group By ist der gesamte Ausdruck zu wiederholen.

    Trick 2:

    with xTemp as (
    select .... date(.....) as mydate
    from ...
    )
    select ...
    group by ..., mydate, ...

    Bei Week_ISO ist noch zu berücksichtigen, dass die Funktion nur die Woche OHNE Jahr ermittelt.

    Die Woche 01 kann daher das aktuelle oder bereits das Folgejahr, die Woche 53 das Vor- oder aktuelle Jahr sein.

    Du musst also hier noch das Jahr dieser Woche mit berücksichtigen!

    case week_iso(mydate)
    when 1
    case month(mydate)
    when 12 then year(mydate) + 1 else year(mydate) end
    when 53
    case month(mydate)
    when 1 then year(mydate) - 1 else year(mydate) end
    else
    year(mydate)
    end as weekyear
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    Correlation Names (z.B. Woche) können im gleichen Sub-Select nicht verwendet werden. Deshalb muss entweder der Ausdruck im Group by wiederholt werden oder eine Common Table Expression oder ein weiterer Sub-Select verwendet werden.

    zu einem Sub-Select gehören:
    Select ... From ... Where ... Group By ... Having

    Mehrere Sub-Selects können über UNION, INTERSECT oder EXCEPT zu einem Full-Select verknüpft werden.

    Order By liegt außerhalb des Full-Selects. Deshalb kann ein Correlation-Name, der in einem Sub-Select definiert wurde hier auch angegeben werden.

    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

Similar Threads

  1. SQL: Ausführungsverhalten einer Funktion in einem CASE-Statement
    By mwithake in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 04-08-09, 14:57
  2. sql funktion
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-06-06, 12:16
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Erstellen Trigger über SQL / Read Funktion
    By GHoffmann in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 07-07-05, 09:18
  5. SQL Funktion " Like"
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-01-02, 16:08

Berechtigungen

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