在Oracle中滚动6个月的日期

时间:2018-06-21 11:46:02

标签: oracle

我想将六个月的日期从2016年开始滚动到当前日期,输出应如下所示

 Year   Start_Date    End_Date
 2016   1/1/2016      30/6/2016
 2016   1/7/2016      31/12/2016
 2017   ... like this for 2017 & 2018

我尝试像获取一年中的第一个日期一样

SELECT TRUNC(to_date(Date_key, 'YYYYMMDD'), 'YEAR')  
FROM Table; 

,并从第一个日期起增加六个月,但是在这种情况下,结束日期将是一个问题。有没有可以不用循环的功能?

2 个答案:

答案 0 :(得分:3)

像这样吗?

j

答案 1 :(得分:1)

您也可以尝试

SELECT :p_from_year + CEIL(ROWNUM/2)-1,
    ADD_MONTHS(TRUNC(TO_DATE(:p_from_year + CEIL(rownum/2)-1, 'YYYY'), 'YYYY'),6-(MOD(rownum, 2)*6)) from_date,
    ADD_MONTHS(TRUNC(TO_DATE(:p_from_year + CEIL(rownum/2)-1, 'YYYY'), 'YYYY'),12-(MOD(rownum, 2)*6))-1 to_date
  FROM dual
  CONNECT BY CEIL(rownum/2)-1 <= (:p_to_year - :p_from_year)