oracle 列出指定时间范围内的所有月份

 今天在做一个系统的时候要到这么一个需求:

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

核心代码:

第一种方法:

Java代码 复制代码 收藏代码
  1. SELECT TO_CHAR(
  2. add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),
  3. 'YYYY-MM'
  4. ) as yearMonth
  5. FROM DUAL
  6. CONNECT BY ROWNUM <= (
  7. select months_between(to_date('2012-07', 'yyyy-mm'),
  8. to_date('2011-03', 'yyyy-mm')) from dual
  9. )
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
                     )



第二种方法:

Java代码 复制代码 收藏代码
  1. SELECT TO_CHAR(
  2. add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),
  3. 'YYYY-MM'
  4. ) as yearMonth
  5. FROM all_objects
  6. where ROWNUM <= (
  7. select months_between(to_date('2012-07', 'yyyy-mm'),
  8. to_date('2011-03', 'yyyy-mm')) from dual
  9. )  

你可能感兴趣的:(oracle,时间)