【问题标题】:Oracle select months out of a timeframeOracle 在时间范围内选择月份
【发布时间】:2012-03-16 22:07:43
【问题描述】:

得到一个表 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   

任何想法我怎么办? 谢谢!

【问题讨论】:

    标签: sql database oracle date


    【解决方案1】:

    你应该使用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" )
    

    【讨论】:

      【解决方案2】:

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

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

      另一种选择是查看“连接方式”和递归查询。不过需要一些学习。

      【讨论】:

        猜你喜欢
        • 2012-07-02
        • 2013-07-20
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多