Kalender mit CONNECT BY

Mit der folgenden View können wir eine Kalendertage Tabelle erstellen. Das Statement lässt sich auf jeder aktuellen Oracle Datenbank ausführen. Zusätzlich habe ich noch das um 6 Monate verschoben Geschäftsjahr implementiert.

Auf dieser Basis lassen sich mit den entrechenden Format Masken vielen zusätzliche Information generieren.

-- Datumsformat festlegen
ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY';

-- Die erste View stetzt das Startdatum und die größe des Kalenders in Tagen
WITH 
   v_start AS ( 
      SELECT LEVEL lfdnr
           , to_date('01.01.2020','DD.MM.YYYY') -1 start_datum
        FROM dual
        CONNECT BY LEVEL <= 30000) 
-- Basierend auf der ersten View werden die Tage berechnet.		
,  v_gj_datum AS (
      SELECT start_datum + lfdnr datum
           , ADD_MONTHS(start_datum  + lfdnr ,6)   gj_datum
        FROM v_start )
-- Mit der Liste aus der zweiten View lassen sich alle 
-- relevanten Informationen berechnen oder ableiten		
SELECT datum
     , gj_datum
     , TRUNC (gj_datum,'yyyy') gj_jahr_datum
     , TO_NUMBER(TO_CHAR( TRUNC (gj_datum,'YYYY'),'YYYY')) gj_jahr_nr
     , TRUNC (gj_datum,'Q') gj_qt_datum
     , TO_NUMBER(TO_CHAR( TRUNC (gj_datum,'Q'),'Q')) gj_qt_nr
  FROM v_gj_datum ;

Schreibe einen Kommentar

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