小编典典

Oracle-将日期分成几个季度

sql

给定2个日期(StartDate和EndDate),我该如何在Pl / SQL中生成季度周期。

例子:

Start Date: 01-JAN-2009
End Date: 31-DEC-2009

预期产量:

StartDate        EndDate
01-JAN-2009      31-MAR-2009
01-APR-2009      30-JUN-2009
01-JUL-2009      30-SEP-2009
01-OCT-2009      31-DEC-2009

阅读 229

收藏
2021-04-28

共1个答案

小编典典

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

参数规则,您可能需要调整查询以适合您的目的:

  • 如果start_date不是确切的季度开始日期,则它有效地使用季度包含开始日期。
  • 如果end_date不是确切的季度末,那么我们将在end_date之前的那个季度结束(而不是包含结束日期的那个季度)。
2021-04-28