SQL: Gestern, letzte Woche, letzter Monat

select
  -- Last month period
  trunc(sysdate, 'mm') - interval '1' month last_month_start,
  trunc(sysdate, 'mm') - interval '1' second last_month_end,
  -- Last week period
  trunc(sysdate, 'iw') - interval '7' day last_week_start,
  trunc(sysdate, 'iw') - interval '1' second last_week_end,
  -- Last day period
  trunc(sysdate, 'dd') - interval '1' day last_day_start,
  trunc(sysdate, 'dd') - interval '1' second last_day_end
from dual

Mit diesem SQL-Statement werden ermittelt:

  • der letzte Monat,
  • die letzte Woche und
  • Gestern

Und zwar jeweils der Anfang und das Ende des Zeitraumes (letzte Sekunde).

LAST_MONTH_START   LAST_MONTH_END 
-----------------  -----------------
01.02.17 00:00:00  28.02.17 23:59:59


LAST_WEEK_START    LAST_WEEK_END 
-----------------  -----------------
20.03.17 00:00:00  27.03.17 23:59:59


LAST_DAY_START     LAST_DAY_END 
-----------------  -----------------
28.03.17 00:00:00  28.03.17 23:59:59
Update vom 05.04.2017:

Abfrage angepasst nach Hinweis von Jürgen Sieben. Dankeschön.  ^^

2 Gedanken zu „SQL: Gestern, letzte Woche, letzter Monat

  1. Hallo Markus,
    stimmt, aber so machte man das, mit Verlaub, in den 90er Jahren. Seit Version 9 der Datenbank geht es auch so:

    select trunc(sysdate, ‚MM‘) – interval ‚1‘ month monat_von,
    trunc(sysdate, ‚MM‘) – interval ‚1‘ second monat_bis
    from dual;

    Warum ist nicht endlich einmal Schluss mit der Verwendung dieser alten Magic Numbers? 7 + 86399/86400 ? Ernsthaft?

    1. Dann ist mein Vorschlag ja abwärtskompatibel bis Oracle 8i, na wenn das nix ist? 😉

      Nein ernsthaft, Danke für Deinen Hinweis Jürgen. Die Variante ist natürlich eleganter. Habe meinen Beitrag angepasst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.