oracle查询出一段时间内每月有几周和每周一开始到周日的日期
阅读原文时间:2021年04月20日阅读:1

前言:一般做数据统计写存储过程的时候相信好多朋友都对日期进行过处理,这是我当时对数据进行处理,做统计用的。当时做要求必须显示日期。尤其是对周进行统计的时候,特别恶心,于是把我以前对日期操作的存储过程中的sql,对大家分享一下。希望能够对大家能有所帮助。废话不多少了,直接上sql。

 select a.* from (
    select to_char(dateTime, 'yyyy-mm') as 年月,dateTime as 开始日期, dateTime+6 as 结束日期,
    TO_CHAR(dateTime,'W')
       as 第几周 from  
    (  
      select dateTime,Rownum rn from   
      (  
        with t as
        (select rownum-1 rn from dual connect by rownum<=10000)
        select to_date('2015-02-01','yyyy-mm-dd')+rn as dateTime from t where to_date('2015-02-01','yyyy-mm-dd')+rn<=SYSDATE
      ) b where to_char(b.dateTime, 'day') = '星期一'  
    )
    ) a

可以直接查询出有每个月中周一和周日的日期,然后属于第几周

with t as
        (select rownum-1 rn from dual connect by rownum<=10000)

就是将(select rownum-1 rn from dual connect by rownum<=10000)查询出来的数据赋值给t,方便使用

with t as
        (select rownum-1 rn from dual connect by rownum<=10000)
        select to_date('2015-02-01','yyyy-mm-dd')+rn as dateTime from t where to_date('2015-02-01','yyyy-mm-dd')+rn<=SYSDATE

得到从2015年2月1日到2015年2月1日加上一万零一天之间的日期

  select dateTime,Rownum rn from   
      (  
        with t as
        (select rownum-1 rn from dual connect by rownum<=10000)
        select to_date('2015-02-01','yyyy-mm-dd')+rn as dateTime from t where to_date('2015-02-01','yyyy-mm-dd')+rn<=SYSDATE
      ) b where to_char(b.dateTime, 'day') = '星期一' 

这条sql可以得到2015年2月1日到2015年2月1日加上一万零一天之间中周一的日期

运行显示的效果:

  

希望对写存储过程做周报和日报的有点帮助。