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

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

相关推荐
固定资产管理系统软件9 分钟前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
xier_ran1 小时前
【infra之路】GPU 存储层次总结:L1 / L2 / HBM
java·网络·数据库
FoldWinCard2 小时前
K8s集群部署的方法原理
大数据·容器·kubernetes
招财小梗3 小时前
AI矩阵获客,品牌连锁落地方案揭秘
大数据·人工智能·矩阵
用户3610588626123 小时前
SparkSQL 之 Hive On Spark 原理分析
大数据·spark
白色机械键盘3 小时前
领域大模型微调数据集构建实战
大数据·人工智能
@insist1233 小时前
系统集成项目管理工程师-信息和文档管理
网络·数据库·软考·系统集成项目管理工程师·软考中项·软件水平考试
东莞和裕包装4 小时前
如何管控广州定制纸箱生产中的啤切精度与印刷色差质量问题
大数据·运维·网络·人工智能
残 风5 小时前
PostgreSQL 存储机制详解
数据库·postgresql·开源·数据库开发