考虑是否有两个列
的表格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|
........
FROM
和TO
来自每一行定义了一段时间。此期间(第2行和第4行(之间也可能存在重叠,或覆盖多个时期
如果在此处给出start_date
和end_date
作为参数,则要求返回所有日期属于参数,也属于列中的任何时期
例如如果start_date
是2013-12-25
,并且end_date
是2014-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);
希望这会有所帮助!