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
Règles pour les paramètres, vous devrez peut-être ajuster la requête en fonction de vos besoins :
- Si start_date n'est pas le début exact du trimestre, il utilise effectivement le trimestre contenant la date de début.
- Si end_date n'est pas la fin exacte du trimestre, nous terminons le trimestre qui s'est terminé AVANT end_date (pas celui contenant la date de fin).