MySql 日期周处理方式

MySql 日期周处理方式

最近在做数仓相关工作,最近遇到 几个问题,

1、计算指定日期是一年中的第几周,周一为周的第一天

2、计算周的开始时间,结束时间

3、计算周对应的年 比如 2023-01-01 WEEKOFYEAR(2023-01-01) 是2022年的52周,但是日期却是2023年,在系统查询的时候这里会有问题,需要判断 周的所属年份。

如下是我写的一个sql脚本 来实现 这些问题 mysql 版本 5.7 其他数据库可能要对应的修改一下函数,思路类同

sql 复制代码
SET @biz_date = '2023-01-01';
SELECT 
@biz_date biz_date,       -- 日期
YEAR(@biz_date) year_,    -- 年
MONTH(@biz_date) month_,  -- 月
DAY(@biz_date) day_,      -- 日
WEEKOFYEAR(@biz_date) week_, -- 周 日期date位于那一年的第几周。周一作为一周的第一天。 这一周算上一年还是下一年,取决于这一周的大多数日期(4天以上)在哪一年。算在前一年,就是前一年的最后一周;算在后一年就是后一年的第一周。
CASE    WHEN WEEKOFYEAR(@biz_date) IN(52,53) AND MONTH(@biz_date) = 1 THEN YEAR(@biz_date)-1 
         WHEN WEEKOFYEAR(@biz_date) = 1 AND MONTH(@biz_date) = 12 THEN YEAR(@biz_date)+1 
         ELSE YEAR(@biz_date)
         END week_year,  -- 计算周对应的年   比如 2023-01-01  WEEKOFYEAR(2023-01-01) 是2022年的52周,但是日期却是2023年,在系统查询的时候这里会有问题,需要判断 周的所属年份
DATE_SUB(@biz_date,INTERVAL WEEKDAY(@biz_date) DAY) week_start, -- 计算周的开始时间
DATE_ADD(@biz_date,INTERVAL 6-WEEKDAY(@biz_date) DAY) week_end  -- 计算周的结束时间
;

以下是执行结果,可能存在问题,欢迎指正

相关推荐
JIngJaneIL15 分钟前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
微学AI35 分钟前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
廋到被风吹走1 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
有想法的py工程师2 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
福客AI智能客服2 小时前
从被动响应到主动赋能:家具行业客服机器人的革新路径
大数据·人工智能
Nandeska2 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河01042 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库
过期动态3 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
Mr.朱鹏3 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
一位代码3 小时前
mysql | 常见日期函数使用及格式转换方法
数据库·mysql