日期:2014-05-16  浏览次数:20457 次

oracle 列出指定时间范围内的所有月份
今天在做一个系统的时候要到这么一个需求:

按月份统计出指定时间范围内的数据量,写好sql后执行发现当某个月份不存在数据时,这个月份在统计列表中就不会出现。所以要想办法将给出的时间范围内的所有月份列出来然后和之前的统计结果做一个左关联就OK了。

核心代码:

第一种方法:

SELECT TO_CHAR(
                add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),
                'YYYY-MM'
              ) as yearMonth
  FROM DUAL
CONNECT BY ROWNUM <= (
                       select months_between(to_date('2012-07', 'yyyy-mm'),
                       to_date('2011-03', 'yyyy-mm')) from dual
                     )


第二种方法:

SELECT TO_CHAR(
                add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),
                'YYYY-MM'
              ) as yearMonth
  FROM all_objects
where ROWNUM <= (
                       select months_between(to_date('2012-07', 'yyyy-mm'),
                       to_date('2011-03', 'yyyy-mm')) from dual
                     )