sql >> Base de Datos >  >> RDS >> Oracle

Oracle:divide las fechas en cuartos

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).