SELECT ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL-1) ) AS qstart
, ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1 AS qend
FROM ( SELECT TO_DATE('&start_date') AS start_date
, TO_DATE('&end_date') AS end_date
FROM DUAL
) PARAM
CONNECT BY ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1
<= PARAM.end_date
Regeln für Parameter, eventuell müssen Sie die Abfrage an Ihre Zwecke anpassen:
- Wenn start_date nicht der exakte Quartalsstart ist, wird effektiv das enthaltene Startdatum des Quartals verwendet.
- Wenn end_date nicht das genaue Quartalsende ist, enden wir mit dem Quartal, das VOR end_date endete (nicht dasjenige, das das Enddatum enthält).