mysql实现日期的分组功能

业务需要把每天的日期进行分组,分组原则是上周四 - 本周三,

例如20230629-20230705这个日期范围算一个分组,

20230707周五需要归到20230706-20230712这个分组,以此类推...

mysql的实现方案如下:

CONCAT(DATE_FORMAT(DATE_SUB(date_format(source_time, '%Y%m%d'), 
	INTERVAL (WEEKDAY(date_format(source_time, '%Y%m%d')) + 4) % 7 DAY), '%Y%m%d'), 
	'-', 
	DATE_FORMAT(DATE_ADD(date_format(source_time, '%Y%m%d'), 
		INTERVAL (6 - (WEEKDAY(date_format(source_time, '%Y%m%d')) - 3)) % 7 DAY), '%Y%m%d')

例如对20230703输出结果是

20230629-20230705

其中sourcetime是2023-07-01 07:02:14这种格式,

date_sub(日期, interval (x day))是mysql里日期加减的语法,

weekday对周一到周日的取值分别是0-6

对每个日期先找到其归属的周四,例如20230703周一,weekday的取值是0,需要往前减4天才是上周四,(0+4)%7 = 4

再找到其归属的周三,例如20230703周一,weekday的取值是0,需要往后加2天才是周三,(6-(0-3))%7 = 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值