Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:suddividi le date in trimestri

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