生成每年的日期范围

时间:2016-11-28 15:47:39

标签: oracle oracle11g oracle11gr2 oracle11gr1

我想生成截断('7/1/2014','mm / dd / yyyy')和trunc(sysdate-1)+0.99999(2014年7月1日至昨天午夜)之间的日期范围基础。

请参阅附图,了解预期结果(https://i.stack.imgur.com/UD4Ub.png

1 个答案:

答案 0 :(得分:0)

像这样的东西。根据需要进行调整。你可能不会select * from ranges,而是你会在任何地方使用范围,但是你需要它们。从我的解决方案中的表dt中选择的输入日期input_date可能是您应用程序中的绑定变量等。希望您能够自己找出调整;如果没有,请回信。

with
     input_date ( dt ) as (
       select to_date('07/01/2014', 'mm/dd/yyyy')
       from   dual
     ),
     ranges ( date_from, date_to ) as (
       select add_months(dt, 12 * (level - 1)) + level - 1,
              least(trunc(sysdate), add_months(dt, 12 * level) + level - 1)
       from   input_date
       connect by add_months(dt, 12 * (level - 1)) + level - 1 <= trunc(sysdate)
     )
select * from ranges
;

DATE_FROM   DATE_TO
----------  ----------
07/01/2014  07/01/2015
07/02/2015  07/02/2016
07/03/2016  11/28/2016