Oracle实现日历

浏览: 1188

今天群里网友在聊用SQL写日历,于是自己也写了一下,2种方式

一、

 with ltz as
 (select trunc(sysdate, 'MM') + level - 1 as d,
         to_char(trunc(sysdate, 'MM') + level - 1, 'd') wd,
         to_char(trunc(sysdate, 'MM') + level, 'iw') iw
    from dual
  connect by level <=
             trunc(add_months(sysdate, 1), 'MM') - trunc(sysdate, 'MM'))
select max(decode(wd, 1, d, null)) as Sunday,
       max(decode(wd, 2, d, null)) as Monday,
       max(decode(wd, 3, d, null)) as Tuesday,
       max(decode(wd, 4, d, null)) as Sanday,
       max(decode(wd, 5, d, null)) as Siday,
       max(decode(wd, 6, d, null)) as Friday,
       max(decode(wd, 7, d, null)) as Saturday,
       iw
  from ltz t
 group by iw
 order by iw


二、

 with ltz as
 (select trunc(sysdate, 'MM') + level - 1 as d,
           to_char(trunc(sysdate, 'MM') + level - 1, 'D') title,
         to_char(trunc(sysdate, 'MM') + level, 'iw') iw
    from dual
  connect by level <= trunc(add_months(sysdate, 1), 'MM') - trunc(sysdate, 'MM'))
select *
  from ltz t pivot(max(d) 
  for title in(1 as Sunday,
               2 as Monday,
               3 as Tuesday,
               4 as Zhousan,
               5 as Zhousi,
               6 as Friday,
               7 as Saturday))
 order by iw 
推荐 4
本文由 老头子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

你也玩这个啊 哈哈
有点意思

要回复文章请先登录注册