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 ;