Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle - quebrar datas em trimestres

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

Regras para parâmetros, talvez seja necessário ajustar a consulta para atender às suas finalidades:
  • Se start_date não for o início exato do trimestre, ele usará efetivamente a data de início do trimestre.
  • Se end_date não for o final exato do trimestre, encerramos no trimestre que terminou ANTES de end_date (não aquele que contém a data de término).