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

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

相关推荐
宇宙超级勇猛无敌暴龙战神8 分钟前
基于redis完成延迟队列
数据库·redis·缓存·redisson·延迟队列
晨曦_子画17 分钟前
将 SQL 数据库连接到云:PostgreSQL、MySQL、SQLite 和云集成说明
数据库·sql·mysql·postgresql·sqlite
冷白白19 分钟前
【MySQL】函数
android·数据库·mysql·adb
德希智慧水利水务22 分钟前
河道无人机雷达测流监测系统由哪几部分组成?
大数据·人工智能·安全·信息可视化·无人机
Ling_suu44 分钟前
Spring——提前编译
大数据·运维·spring
服务端相声演员1 小时前
Git 常用命令大全与详解
大数据·git
运维佬1 小时前
在 Linux 系统上部署 Oracle 数据库涉及多个步骤
linux·数据库·oracle
南棱笑笑生1 小时前
20241116下载中科创达的TurboX D660核心板的Android11的SDK的详细LOG
数据库·mysql
墨城烟柳ベ旧人殇1 小时前
MySQL数据库2——SQL语句
数据库·sql·mysql
喻师傅1 小时前
Scala-字符串(拼接、printf格式化输出等)-用法详解
大数据·开发语言·scala