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
Regole per i parametri, potresti dover modificare la query in base ai tuoi scopi:
- Se data_inizio non è l'inizio del trimestre esatto, utilizza effettivamente la data di inizio del trimestre.
- Se end_date non è esattamente la fine del trimestre, finiamo nel trimestre terminato PRIMA di end_date (non quello che contiene la data di fine).