如,11月份
第1周是2012-11-01到2012-11-04
第2周是2012-11-05到2012-11-11
第3周是2012-11-12到2012-11-18
第4周是2012-11-19到2012-11-25
第5周是2012-11-26到2012-11-30
.....
不知道怎样写可以实现,求大神们帮助

解决方案 »

  1.   


    SELECT row_number() over(ORDER BY m.groupid DESC) rn,
           MIN(m.t_date) start_date,
           MAX(m.t_date) end_date
      FROM (
            SELECT '201211' || to_char(LEVEL,'fm09') t_date,
                   to_char(to_date('201211' || to_char(LEVEL,'fm09'),'yyyymmdd') - 1, 'd') - 1 - LEVEL groupid
              FROM dual
            CONNECT BY LEVEL <= LAST_DAY(TO_DATE('201211', 'yymm')) - TO_DATE('201211', 'yymm') + 1
           ) m
    GROUP BY m.groupid
    ORDER BY m.groupid DESC        RN START_DATE END_DATE
    ---------- ---------- ---------
             1 20121101   20121104
             2 20121105   20121111
             3 20121112   20121118
             4 20121119   20121125
             5 20121126   20121130'201211'是传递的参数