Oracle在一个时间范围内选择了几个月

时间:2012-02-27 12:22:22

标签: sql database oracle date

给出一个表t(id,from,to),其中from和to是两个日期跨越多年,我想在该表上做一个选择,对于表t中的每个时间帧都会返回该时间范围内的月/年清单。 例如。表t的内容将是:

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   

任何想法我怎么能这样做? 谢谢!

2 个答案:

答案 0 :(得分: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" )

答案 1 :(得分:1)

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

您可以加入日期介于两者之间的日期。

另一种选择是查看“连接”和递归查询。虽然需要学习。