给出一个表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
任何想法我怎么能这样做? 谢谢!
答案 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)
最简单的想法可能是创建一个小表,其中每行有一个日期,跨越您可能的时间范围。
您可以加入日期介于两者之间的日期。
另一种选择是查看“连接”和递归查询。虽然需要学习。