oracle 本月日历

来源:互联网 发布:青岛网络教育 编辑:程序博客网 时间:2024/05/16 06:04

select week,
       min((case when weekday='1' then day else null end)) "星期日",
       min((case when weekday='2' then day else null end)) "星期一",
       min((case when weekday='3' then day else null end)) "星期二",      
       min((case when weekday='4' then day else null end)) "星期三",
       min((case when weekday='5' then day else null end)) "星期四",      
       min((case when weekday='6' then day else null end)) "星期五",
       min((case when weekday='7' then day else null end)) "星期六"
 from (select day,
              decode(sign(rn-weekday),-1,week,week+1) week,weekday
         from (SELECT to_date(day,'yyyy-mm-dd') day,
                      to_char(to_date(day,'yyyy-mm-dd'),'d') weekday,
                      to_char(to_date(day,'yyyy-mm-dd'),'w') week,
                      row_number() over(partition by to_char(to_date(day,'yyyy-mm-dd'),'w')order by day) rn
                 from (SELECT to_char(add_months(last_day(sysdate), -1)+1,'yyyymmdd') + level -1 day
                         FROM dual
                       connect by level<= to_char(last_day(sysdate),'yyyymmdd')-to_char(add_months(last_day(sysdate), -1)+1,'yyyymmdd')+1
                       ) ) )
 GROUP BY week
 ORDER BY week;