Oracle查询以在给定的期间和范围内提取所有日期



考虑是否有两个列

的表格
TABLE TIME_FRAME
------------------------
|FROM       |TO        |
|2013-12-13 |2014-01-06|
|2011-12-05 |2011-12-31|
|2014-01-23 |2014-02-22|
|2011-11-21 |2011-12-17|
........

FROMTO来自每一行定义了一段时间。此期间(第2行和第4行(之间也可能存在重叠,或覆盖多个时期

如果在此处给出start_dateend_date作为参数,则要求返回所有日期属于参数,也属于列中的任何时期

例如如果start_date2013-12-25,并且end_date2014-02-10因此,从上面的数据中,它应返回

之间的所有日期
`2013-12-25` and `2014-01-06`
plus
`2014-01-23` and `2014-02-10` 

是否可以为上述要求创建查询(不是通过PL/SQL(?

可以使用级别递归操作员创建一组天,然后通过将其与表数据进行比较来过滤此集合。这是您的工作oracle sql查询:

select day
  from (select to_date('25-DEC-2013', 'dd-mon-yyyy') - 1 + level day
          from dual
        connect by level <= to_date('10-FEB-2014', 'dd-mon-yyyy') -
                   to_date('25-DEC-2013', 'dd-mon-yyyy') + 1)
 where exists
 (select 1 from TIME_FRAME p where day between p.FROM and p.TO);

希望这会有所帮助!

最新更新