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
Reglas para parámetros, es posible que deba ajustar la consulta para que se adapte a sus propósitos:
- Si start_date no es el inicio exacto del trimestre, utiliza efectivamente el trimestre que contiene la fecha de inicio.
- Si end_date no es el final exacto del trimestre, entonces terminamos en el trimestre que finalizó ANTES de end_date (no el que contiene la fecha de finalización).