oracle 计算当前日期是今年的第几周的计算方法

简介: 笔记

一、oracle 计算当前日期是今年的第几周的计算方法(以周六为每周第一天为例)

完整代码:

select * from (
SELECT sysdate , LEVEL 周次,(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7-1 当周第一天,  
                  (TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7+5 当周最后一天  
FROM DUAL CONNECT BY LEVEL<=53 )
where to_char(当周第一天,'yyyy-mm-dd')>=case when  to_char(sysdate,'day')='星期日' then  to_char(sysdate-1,'yyyy-mm-dd')  
              when  to_char(sysdate,'day')='星期一' then  to_char(sysdate-2,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期二' then  to_char(sysdate-3,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期三' then  to_char(sysdate-4,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期四' then  to_char(sysdate-5,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期五' then  to_char(sysdate-6,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期六' then  to_char(sysdate-0,'yyyy-mm-dd') end--以周六为一周的第一天的写法
and to_char(当周最后一天,'yyyy-mm-dd')<=case when  to_char(sysdate,'day')='星期日' then  to_char(sysdate+5,'yyyy-mm-dd')  
              when  to_char(sysdate,'day')='星期一' then  to_char(sysdate+4,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期二' then  to_char(sysdate+3,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期三' then  to_char(sysdate+2,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期四' then  to_char(sysdate+1,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期五' then  to_char(sysdate+0,'yyyy-mm-dd')
              when  to_char(sysdate,'day')='星期六' then  to_char(sysdate+6,'yyyy-mm-dd') end--以周五为一周的最后一天的写法

解释:


在未做过滤的情况下,可以查询出当前日期,今年一年的每周的日期分布情况

13.png

关键是理解里面的每周第一天的写法理解:


周日为每周第一天:(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7


周六为每周第一天:(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7-1


。。。。。。。。以此类推。。。。。。。。。。。。。。。。。。。


周一每周第二天(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7-6


每周最后一天就相反了在周日的基础上加对应的天数即可,即周一为:(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7+1


周二:(TRUNC(sysdate,'YYYY')-7) + (7-TO_CHAR(TRUNC(sysdate,'YYYY'),'D')+1)+(LEVEL-1)*7+2


然后做对应查询区间的过滤,即可获取当前的日期是今年的第几周了,对应想获取本月一号是今年的第几周,或者上月一号是今年的第几周,使用last_day(add_months(sysdate,-1))+1和last_day(add_months(sysdate,-2))+1替换sysdate即可,希望对你有所帮助!


相关文章
|
6月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
138 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
83 0
|
3月前
|
Oracle 关系型数据库 数据库
oracle日期加减的三种方式
【8月更文挑战第15天】在Oracle数据库中,可通过三种方式对日期进行加减操作:一是利用`ADD_MONTHS`函数增减月份,如`ADD_MONTHS(SYSDATE, 2)`表示两个月后;二是运用算术运算符直接加减天数,如`SYSDATE + 7`表示七天后;三是采用`INTERVAL`表达式增加或减少特定时间间隔,如`SYSDATE + INTERVAL &#39;2&#39; YEAR`表示两年后。这些方法可根据实际需求灵活选用。
2132 5
|
10天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
20 7
|
4月前
|
SQL Oracle 算法
|
2月前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
4月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法
相信有很多oracle数据库用户都遇到过在操作Oracle数据库时误删除某些重要数据的情况,这个时候如果数据库没有备份且数据十分重要的,怎么才能恢复误删除的数据呢?北亚企安数据恢复工程师下面简单介绍几个误删除Oracle数据库数据的恢复方法。
|
4月前
|
SQL 存储 Oracle
Oracle数据库中游标的工作原理与优化方法
Oracle数据库中游标的工作原理与优化方法
|
5月前
|
Oracle 关系型数据库 数据库
oracle误删除数据的恢复方法
oracle误删除数据的恢复方法
51 0
|
6月前
|
Oracle 关系型数据库 数据管理
Oracle常用系统函数之日期和时间类函数:时空穿梭者的魔法棒
【4月更文挑战第19天】Oracle数据库中的日期和时间函数是强大的工具,如同时空穿梭者的魔法棒。`SYSDATE`和`CURRENT_TIMESTAMP`能显示当前时间,助你在数据中记录关键时刻;`ADD_MONTHS`函数让你轻易跃过月份,实现时间穿越;而`TO_DATE`和`TO_CHAR`则负责日期和时间的格式转换,如同时间的化妆师。除此之外,还有`EXTRACT`、`LAST_DAY`等更多魔法道具,帮助数据管理专家们自如操控时间,解决各种挑战。掌握这些函数,你也能在数据世界中自由穿梭!