2011-09-26 117 views
3

給定2個日期(StartDate和EndDate),我如何在Pl/SQL中生成季度期間。Oracle - 將日期分爲幾個季度

例子:

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 

回答

3
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 

規則參數,可以你可能需要調整查詢,以滿足您的目的:

  • 如果開始不是確切的季度開始它有效地使用季度contai開始日期。
  • 如果end_date不是確切的四分之一結束,那麼我們在end_date(不包含結束日期的那一個)結束的那個季度結束。
+0

酷做這件事。這工作正常。我可以根據我得到的BR進行更改。非常感謝。 – Asdfg

0

下面是您可以使用PL/SQL

declare 
    startDate Date := '01-JAN-2009'; 
    endDate Date := '31-DEC-2009'; 
    totalQuarters number := 0; 

begin 

    totalQuarters := round(months_between(endDate, startDate),0)/3; 

    dbms_output.put_line ('total quarters: ' || totalQuarters); 
    for i in 1..totalQuarters loop 

    dbms_output.put_line('start date: '|| startDate || ' end date:' || add_months(startDate -1,3)); 
    startDate := add_months(startDate,3) ; 
    end loop; 

end;