Announcement

Collapse
No announcement yet.

Sonntag als Wochentag ermitteln und feststellen ob ein Datum in dieser Woche liegt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sonntag als Wochentag ermitteln und feststellen ob ein Datum in dieser Woche liegt

    Hallo zusammen,
    ich habe folgendes Problem: in MySQL hatte ich folgende Lösung
    case when
    DATEDIFF(Q3.eckende, (DATE_ADD(

    DATE_SUB(DATE(NOW()), INTERVAL DAYOFWEEK(NOW()) DAY),

    INTERVAL 8 DAY ))) < 8
    then
    'In dieser Woche fällig'

    um festzustellen ob ein Q3.eckende in dieser Woche liegt, d.h. wenn heute z.B. Dienstag ist dann nur Eckende der zwischen Dienstag und Sonntag liegt. Es hat auch gut funktioniert, bis die DB auf Oracle übertragen worden, wo ich noch nicht so fit bin.
    Hat da einer vielleicht eine Idee, wie ich es im PLSQL übersetzen soll.
    Die Übersetzung:
    case when
    eckende between (TRUNC(SYSDATE) - 1) AND (TRUNC(SYSDATE) - TO_NUMBER(TO_CHAR(TRUNC(SYSDATE),'D'))) + 7
    then
    'In dieser Woche fällig'
    funktioniert nicht.
    Danke.

  • #2
    Ich weiß nicht, ob ich Deine Frage richtig verstanden habe, aber Du kannst vielleicht mit IW Formatierung arbeiten, das liefert die Kalenderwoche.
    [HIGHLIGHT=SQL]
    select *
    from (
    select TO_CHAR(trunc(sysdate + 2 /*Testdaten, ersetzen mit q3.eckfate*/),'iw') as Q3EckdateWeek,
    TO_CHAR(TRUNC(SYSDATE), 'iw') as CurrentWeek
    from dual) x
    where Q3EckdateWeek = CurrentWeek
    [/HIGHLIGHT]
    Gruß, defo

    Comment


    • #3
      Danke erstmal, aber die Problematik ist folgende, dass ich nicht die ganze Woche brauche, sonder nur immer die restlichen Tage der Woche. Z.B. Am Mittwoch nur die Tage von Mittwoch bis Sonntag am Donnerstag nur die Tage von Donnerstag bis Sonntag. Von daher muss das Programm erst den Sonntag bestimmen dann den aktuellen Wochentag und dann feststellen, ob das abgefragte Datum in diesem Zeitfenster liegt.

      Comment


      • #4
        Irgendwie erscheint es einfacher erst den aktuellen Wochetag zu ermitteln (1-7) und dann den Sonntag(7).
        Das Zeitfenster ist dann die Differenz in Tagen
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Irgendwie erscheint es einfacher erst den aktuellen Wochetag zu ermitteln (1-7) und dann den Sonntag(7).
          Das Zeitfenster ist dann die Differenz in Tagen
          Hallo Christian,
          Und wie sieht's aus mit dem Quellcode?
          Danke

          Comment


          • #6
            Also sehr präzise drückst Du Dich nicht aus.
            Was bedeutet z.B. "funktioniert nicht"?

            [HIGHLIGHT=SQL]
            -- Daten zwischen heute und dem Ende der Woche (Sonntag)
            SELECT
            vh.heute as virtual_heute,
            q3.eckende,
            --TRUNC(q3.eckende),
            (TRUNC(vh.heute)
            + 8-TO_NUMBER(TO_CHAR(vh.heute,'D')))
            as SonntagLimit
            FROM (-- Testdaten
            select sysdate- 1 as eckende
            from dual union all
            select sysdate- 2 from dual union all
            select sysdate- 3 from dual union all
            select sysdate- 4 from dual union all
            select sysdate- 5 from dual union all
            select sysdate- 6 from dual union all
            select sysdate- 7 from dual union all
            select sysdate+ 0 from dual union all
            select sysdate+ 1 from dual union all
            select sysdate+ 2 from dual union all
            select sysdate+ 3 from dual union all
            select sysdate+ 4 from dual union all
            select sysdate+ 5 from dual union all
            select sysdate+ 6 from dual union all
            select sysdate+ 7 from dual union all
            select sysdate+ 8 from dual union all
            select sysdate+ 9 from dual union all
            select sysdate+10 from dual union all
            select sysdate+11 from dual union all
            select sysdate+12 from dual union all
            select sysdate+13 from dual union all
            select sysdate+14 from dual union all
            select sysdate+15 from dual ) q3,
            (-- Testdaten verschiedene 'heute'
            select sysdate as heute
            from dual union all
            select sysdate+ 1 from dual union all
            select sysdate+ 2 from dual union all
            select sysdate+ 3 from dual union all
            select sysdate+ 4 from dual union all
            select sysdate+ 5 from dual union all
            select sysdate+ 6 from dual union all
            select sysdate+ 7 from dual union all
            select sysdate+ 8 from dual union all
            select sysdate+ 9 from dual ) vh
            where q3.eckende between
            TRUNC(vh.heute)
            and(TRUNC(vh.heute) +
            8-TO_NUMBER(TO_CHAR(vh.heute,'D')))
            [/HIGHLIGHT]
            Gruß, defo

            Comment

            Working...
            X