2013-03-08 98 views
-1

我很抱歉,但我的上一个问题没有适当的框架,所以创建另一个职位。查询哪个日期范围内的日期列表

我的问题是类似以下问题: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:14582643282111

我需要编写内部查询,这将给我两个日期范围,以外部查询之间的日期列表。下面两行

我内心的查询返回:

SELECT request.REQ_DATE, request.DUE_DATE FROM myTable where id = 100 

REQ_DATE   DUE_DATE 
    3/19/2013   3/21/2013 
    3/8/2013   3/8/2013 

所以我需要内部查询将以下日期返回外部查询:

3/19/2013 
3/20/2013 
3/21/2013 
3/8/2013 

在上面的帖子答案有开始日期和结束日期硬编码,在我的情况下,它来自其他表格。所以我尝试写这样的查询不工作:

Select * from outerTable where my_date in 
( 
    select to_date(r.REQ_DATE) + rownum -1 from all_objects, 
    ( 
     SELECT REQ_DATE, DUE_DATE 
     FROM myTable where id = 100 
    ) r        
    where rownum <= to_date(r.DUE_DATE,'dd-mon-yyyy')-to_date(r.REQ_DATE,'dd-mon-yyyy')+1; 
) 
+0

如果答案下面不适合你,请参阅我留在之前岗位答案。我几分钟前添加了答案,不知道你会重新发布。我的回答基于你提到的“Ask Tom”文章。这就是说,我认为下面的答案看起来很稳固。 – 2013-03-08 21:09:16

回答

0
with 
T_from_to as (
    select 
     trunc(REQ_DATE) as d_from, 
     trunc(DUE_DATE) as d_to 
    FROM myTable 
    where id = 100 
), 
T_seq as (
    select level-1 as delta 
    from dual 
    connect by level-1 <= (select max(d_to-d_from) from T_from_to) 
) 
select distinct d_from + delta 
from T_from_to, T_seq 
where d_from + delta <= d_to 
order by 1