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  -- 计算周的结束时间
;

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

相关推荐
李元豪1 小时前
grpo nl2sql qwen3 模型强化学习训练有效果的成立条件有哪些
数据库·oracle
Hello.Reader4 小时前
RedisJSON 路径语法深度解析与实战
数据库·redis·缓存
TDengine (老段)5 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Deng9452013146 小时前
基于大数据的电力系统故障诊断技术研究
大数据·matplotlib·深度特征提取·随机森林分类算法·标签编码
设计师小聂!8 小时前
Linux系统中部署Redis详解
linux·运维·数据库·redis
kfepiza8 小时前
Debian-10编译安装Mysql-5.7.44 笔记250706
linux·数据库·笔记·mysql·debian·bash
Touper.8 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
不剪发的Tony老师8 小时前
phpMyAdmin:一款经典的MySQL在线管理工具又回来了
数据库·mysql·phpmyadmin
极限实验室8 小时前
TDBC 2025 可信数据库发展大会,极限科技邀您来赴约!
数据库
小菜鸡06269 小时前
FlinkSQL通解
大数据·flink