2012-02-27 50 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」和遞歸查詢。雖然採取了一些學習。

相關問題