Oracle以周五为一周的第一天统计数量
需求:以每年的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以周五为一周的第一天统计数量相关推荐
- Sql Server 指定日期所在周的第一天和最后一天
Declare @i Int = 0 ; While @i < 7BeginSet @i += 1 ;Set DateFirst @i ;Declare @dt DateTime = '2019 ...
- oracle函数自定义日历周获取周数
函数:自定义日历周获取周数 功能说明:计算某日期是一年的第几周,支持自定义日历周,将任意周内星期设为一周起始日. 参数说明:currentDate为目标日期:weekStandard为自定义一周开端, ...
- 取消大小周的第一个周末,我吃了顿烤串
作者 | 乔一 编辑 | 尹磊 来源 | 首席人物观 (ID:sxrenwuguan) 快手逾两万名员工取消大小周的第一个双休日,我给快手的朋友发去贺电,对方回:"特意和同事去吃了顿烤串庆祝 ...
- oracle如何查当前日期所在周,Oracle查询当前日期对应周数
在Oracle中查询当前日期对应的SQL oracle常见的日期格式有Date & Timestamp 其中Data常用的格式为:YYYY-MM-DD HH24-MI-SS 其中Timesta ...
- java 一周的第一天_Java获取某年某周的第一天
Java获取某年某周的第一天 1.设计源代码 FirstDayOfWeek.java: /** * @Title:FirstDayOfWeek.java * @Package:com.you.free ...
- 根据日期计算属于第几周(周日是一周的第一天)
根据 日期计算属于第几周,见代码,重点是红色加粗代码,如果日期是下一年的第一周的时候的解决方案,如果谁有更好的方法,请不吝赐教 /** * 根据日期计算属于第几周(周日是一周的第一天) * ...
- java获取指定日期的所在周的第一天(周一)
java获取指定日期的所在周的第一天(周一) private static void getWeekByDate(Date time) {SimpleDateFormat sdf = new Simp ...
- Java获取某年某周的第一天
Java获取某年某周的第一天 1.设计源码 FirstDayOfWeek.java: /*** @Title:FirstDayOfWeek.java* @Package:com.you.freemar ...
- java获取指定周的第一天和最后一天(周统计报表)
项目中需要进行周统计,需要获取特定周的第一天和最后一天,然后在此时间范围内进行统计. /*** 获取指定周的第一天* * @param year* @param week* @return*/publ ...
最新文章
- linux进程间通信:system V 信号量和共享内存实现进程间同步
- ASP.NET 2.0中轻松实现网站换肤
- 【研发管理】中国企业 VS 世界优秀企业在产品研发上差距(下)
- JS 将有规律的数组,转换成对象数组
- win7禁用其他软件只启用自定义软件的方法
- input点击链接另一个页面,各种操作。
- mysql函数(五.流程控制函数)
- 设置网页打开默认全屏_微信公众号里的视频不能进行全屏播放的解决方法
- OEL6.1下oracle 11gr2 ASM安装
- 腾讯、阿里能像 Facebook 一样发币吗?
- angularjs post返回html_Python 爬虫网页解析工具lxml.html(二)
- 冈萨雷斯图像处理Matlab函数汇总
- Python迭代器的生成与学习笔记
- 推美妆、搭IP,出货千万的天猫精灵打上95后的主意...
- 数据压缩作业:JPEG原理分析及JPEG解码器的调试
- dbever数据库如何导入excel数据
- Raspberry 2B Ubuntu mate 16.04 *** 完美透明代理
- 关于Mars3D运行步骤以及调接口的问题
- 华为android内存扩大,安卓手机运行内存越来越不够用,华为却放出了这一招来解决!...
- linux设置软件的路径,linux下查看和设置软件的安装路径