2012-02-27 92 views
2

正在给定一个表t(id,from,to),其中from和to是两个日期跨度多年,我想对该表做一个选择,至少表t中的每个时间表将返回该时间范围内的月份/年份列表。 E.G.表t的内容将是:Oracle在一个时间范围内选择几个月

id  from    to 
1  01.10.2011   28.02.2012 
2  01.06.2008   30.09.2008 

select语句应该返回ID,月数年,年:

1 10 2011 
1 11 2011 
1 12 2011 
1 01 2012 
1 02 2012 
2 06 2008 
2 07 2008 
2 08 2008 
2 09 2008 

任何想法我怎么能做到这一点? 谢谢!

回答

3

您应该使用row generator

select 
    id, 
    ADD_MONTHS("from", N.N), 
    to_char(dt_column, 'mm') , 
    to_char(dt_column, 'yyyy') 
from 
    yourTable t 
inner join 
    (SELECT ROWNUM n 
    FROM (SELECT 1 just_a_column 
     FROM dual 
     CONNECT BY LEVEL <= 365 
) N 
    on ADD_MONTHS("from", N.N) <= last_day(t."to") 
+0

谢谢@danihp – maephisto 2012-02-27 13:28:43

1

最简单的想法可能是创建一个小表,每个月有一个日期,并且跨越您的可能时间范围。

你可以加入它的日期之间的两个需要。

另一种选择是查看“connect by”和递归查询。虽然采取了一些学习。

相关问题