Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - diviser les dates en 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

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