需求:以每年的1月1号,如2022-01-01,开始为第一周,第二周从每年的第一个周五开始计算,若每年的1月1号刚好是周五的情况,则第一周从每年的第一个周五开始计算;每年的最后一个周五到下一年的1月1号为最后一周。

1、取某天之后的下一个周五的日期

select next_day(sysdate, '星期五')  from dual

2、取某一年的所有周五的日期

SELECT WWFROM (select wwfrom (select distinct (TRUNC(dt, 'd') + 5) wwfrom (select (to_date('2022-01-01', 'yyyy-mm-dd') + rownum - 1) dtfrom dualconnect by rownum <=to_date('2022-12-31', 'yyyy-mm-dd') -to_date('2022-01-01', 'yyyy-mm-dd') + 1)) aaorder by ww)

比如查询2022年里的所有周五的日期,会发现查出了2021年最后一个周五的日期【2021-12-31】,不符合需求

3、解决方案如下:

添加【WW BETWEEN TO_DATE('2022-01-01', 'yyyy-mm-dd') AND TO_DATE('2022-12-31', 'yyyy-mm-dd')】筛选出这一年的所有周五,单独查出1月1号,

SELECT TO_DATE('2022-01-01', 'yyyy-mm-dd') AS WW FROM DUAL

再通过UNION ALL的方式连接起来,记得去重,即可得到对应的周次

SELECT *FROM (WITH S1 AS (SELECT WWFROM (select wwfrom (select distinct (TRUNC(dt, 'd') + 5) wwfrom (select (to_date('2022-01-01','yyyy-mm-dd') +rownum - 1) dtfrom dualconnect by rownum <=to_date('2022-12-31','yyyy-mm-dd') -to_date('2022-01-01','yyyy-mm-dd') + 1)) aaorder by ww)WHERE 1 = 1AND WW BETWEEN TO_DATE('2022-01-01', 'yyyy-mm-dd') ANDTO_DATE('2022-12-31', 'yyyy-mm-dd')), S2 AS (SELECT TO_DATE('2022-01-01','yyyy-mm-dd') AS WWFROM DUAL)SELECT WW, TO_CHAR(WW, 'yyyy') || '-' || 'WK' || RN AS WKFROM (SELECT DISTINCT WW,ROW_NUMBER() OVER(PARTITION BY TO_CHAR(WW, 'yyyy') ORDER BY WW ASC) AS RNFROM (SELECT *FROM S2UNION ALLSELECT * FROM S1)))ORDER BY WW ASC

4、跨年查询

若要查询多个年份的周次,只需要将每年的1月1号通过UNION ALL连接起开即可,

SELECT *FROM (WITH S1 AS (SELECT WWFROM (select wwfrom (select distinct (TRUNC(dt, 'd') + 5) wwfrom (select (to_date('2022-01-01','yyyy-mm-dd') +rownum - 1) dtfrom dualconnect by rownum <=to_date('2023-12-31','yyyy-mm-dd') -to_date('2022-01-01','yyyy-mm-dd') + 1)) aaorder by ww)WHERE 1 = 1AND WW BETWEEN TO_DATE('2022-01-01', 'yyyy-mm-dd') ANDTO_DATE('2023-12-31', 'yyyy-mm-dd')), S2 AS (SELECT TO_DATE('2022-01-01','yyyy-mm-dd') AS WWFROM DUALUNION ALLSELECT TO_DATE('2023-01-01','yyyy-mm-dd') AS WWFROM DUAL)SELECT WW, TO_CHAR(WW, 'yyyy') || '-' || 'WK' || RN AS WKFROM (SELECT DISTINCT WW,ROW_NUMBER() OVER(PARTITION BY TO_CHAR(WW, 'yyyy') ORDER BY WW ASC) AS RNFROM (SELECT *FROM S2UNION ALLSELECT * FROM S1)))ORDER BY WW ASC

最终效果如下:

5、对具体时间进行判断

取具体时间所在的那一周的第一天的日期,最后通过每一周的第一天的日期进行关联,

SELECT CASEWHEN SYSDATE >=TO_DATE(TO_CHAR(SYSDATE, 'yyyy') || '-01-01', 'yyyy-MM-dd') ANDSYSDATE <next_day(to_date(TO_CHAR(SYSDATE, 'yyyy') || '-01-01','yyyy-mm-dd'),'星期五') THENTO_CHAR(SYSDATE, 'yyyy-MM-dd')WHEN TRIM(TO_CHAR(SYSDATE, 'DAY')) = '星期五' THENTO_CHAR(SYSDATE, 'yyyy-MM-dd')ELSETO_CHAR((TRUNC(SYSDATE, 'WW') - 1), 'yyyy-MM-dd')ENDFROM DUAL

Oracle以周五为一周的第一天统计数量相关推荐

  1. Sql Server 指定日期所在周的第一天和最后一天

    Declare @i Int = 0 ; While @i < 7BeginSet @i += 1 ;Set DateFirst @i ;Declare @dt DateTime = '2019 ...

  2. oracle函数自定义日历周获取周数

    函数:自定义日历周获取周数 功能说明:计算某日期是一年的第几周,支持自定义日历周,将任意周内星期设为一周起始日. 参数说明:currentDate为目标日期:weekStandard为自定义一周开端, ...

  3. 取消大小周的第一个周末,我吃了顿烤串

    作者 | 乔一 编辑 | 尹磊 来源 | 首席人物观 (ID:sxrenwuguan) 快手逾两万名员工取消大小周的第一个双休日,我给快手的朋友发去贺电,对方回:"特意和同事去吃了顿烤串庆祝 ...

  4. oracle如何查当前日期所在周,Oracle查询当前日期对应周数

    在Oracle中查询当前日期对应的SQL oracle常见的日期格式有Date & Timestamp 其中Data常用的格式为:YYYY-MM-DD HH24-MI-SS 其中Timesta ...

  5. java 一周的第一天_Java获取某年某周的第一天

    Java获取某年某周的第一天 1.设计源代码 FirstDayOfWeek.java: /** * @Title:FirstDayOfWeek.java * @Package:com.you.free ...

  6. 根据日期计算属于第几周(周日是一周的第一天)

    根据  日期计算属于第几周,见代码,重点是红色加粗代码,如果日期是下一年的第一周的时候的解决方案,如果谁有更好的方法,请不吝赐教 /** * 根据日期计算属于第几周(周日是一周的第一天)      * ...

  7. java获取指定日期的所在周的第一天(周一)

    java获取指定日期的所在周的第一天(周一) private static void getWeekByDate(Date time) {SimpleDateFormat sdf = new Simp ...

  8. Java获取某年某周的第一天

    Java获取某年某周的第一天 1.设计源码 FirstDayOfWeek.java: /*** @Title:FirstDayOfWeek.java* @Package:com.you.freemar ...

  9. java获取指定周的第一天和最后一天(周统计报表)

    项目中需要进行周统计,需要获取特定周的第一天和最后一天,然后在此时间范围内进行统计. /*** 获取指定周的第一天* * @param year* @param week* @return*/publ ...

最新文章

  1. linux进程间通信:system V 信号量和共享内存实现进程间同步
  2. ASP.NET 2.0中轻松实现网站换肤
  3. 【研发管理】中国企业 VS 世界优秀企业在产品研发上差距(下)
  4. JS 将有规律的数组,转换成对象数组
  5. win7禁用其他软件只启用自定义软件的方法
  6. input点击链接另一个页面,各种操作。
  7. mysql函数(五.流程控制函数)
  8. 设置网页打开默认全屏_微信公众号里的视频不能进行全屏播放的解决方法
  9. OEL6.1下oracle 11gr2 ASM安装
  10. 腾讯、阿里能像 Facebook 一样发币吗?
  11. angularjs post返回html_Python 爬虫网页解析工具lxml.html(二)
  12. 冈萨雷斯图像处理Matlab函数汇总
  13. Python迭代器的生成与学习笔记
  14. 推美妆、搭IP,出货千万的天猫精灵打上95后的主意...
  15. 数据压缩作业:JPEG原理分析及JPEG解码器的调试
  16. dbever数据库如何导入excel数据
  17. Raspberry 2B Ubuntu mate 16.04 *** 完美透明代理
  18. 关于Mars3D运行步骤以及调接口的问题
  19. 华为android内存扩大,安卓手机运行内存越来越不够用,华为却放出了这一招来解决!...
  20. linux设置软件的路径,linux下查看和设置软件的安装路径

热门文章

  1. python IDLE 的调试器
  2. 博客精选:卓越博主分享知识的宝库
  3. C++基础:inline函数
  4. Java Comparator的使用-构建自己的Comparator(Lambda)
  5. 第1节:英语中的名词,冠词和数词,代词
  6. GEE:MODIS计算生物量
  7. python树莓派游戏机_用树莓派制造木制 LED 游戏显示器
  8. [附源码]SSM计算机毕业设计校园二手交易平台的设计JAVA
  9. 给设计小白推荐几款笔记本电脑与工具
  10. dcl学习_dcl简介