参考windows日期图,利用mysql,巧妙计算当前日期属于本月第几周
文章目录
写在前面,
根据评论的一个思想,有个简单的方法,先计算本月份的第一天属于年度哪一周(a),在计算今天属于年度的哪一周(b),b-a+1就完了
实测:SELECT WEEK ( ‘2023-10-27’, 1 ) - WEEK ( ‘2023-10-01’, 1 ) + 1 AS week_of_year;
结果为5
涉及到的mysql函数
- CEILING()向上取整函数
- DAY()计算日期是本月的第几天
- WEEKDAY()计算日期是本周周几,0:表示周一
- INTERVAL关键字,计算时间间隔
先放答案
SET @d=‘2022-10-26 00:00:00’;
select CEILING((DAY(@d)+WEEKDAY(@d-INTERVAL DAY(@d)-1 DAY)) / 7 )
分步解析
1、总体思想,结合windows的日期看,补齐日期矩阵
在这个图上,我们可以清晰的看到10月26号属于10月的第5周,方法就是从上往下数,在第5行,按照这个思想,我们只需要知道,26号往前推,推到这个日期矩阵的开头也就是 9月26号,算出有几天,然后除7向上取整即可。
2、分步解释
1、select DAY(@d); 计算出当前是第几天
10月26号,得出结果为 26
2、select @d-INTERVAL DAY(@d)-1 DAY;计算本月第一天的日期
计算本月第一天的日期,方法有很多种,以下是解释我是用的这一种,得出结果为:2022年10月1日
INTERVAL关键字用于计算间隔多少天的日期
整个语句由三部分组成
@d-INTERVAL:减法,表示往前数
DAY(@d)-1:数量,要想得到10月1号,只需要减去25就行了,所以是 26-1=25
DAY:单位:天
3、select WEEKDAY(@d-INTERVAL DAY(@d)-1 DAY);计算本月第一天属于周几
得出结果为:5
0表示周一,以此类推,当前10月1号是周六,也就 计算结果为5.
此时,就很清晰了,刚好10月1号,再往前补5天,刚好补齐整个日期矩阵
4、(DAY(@d)+WEEKDAY(@d-INTERVAL DAY(@d)-1 DAY);计算整个矩阵有几天
换算成数据公式就是 26 + 5 = 31天,
5、最后除7,向上取整,得出属于第几周。 CEILING()
select CEILING((DAY(@d)+WEEKDAY(@d-INTERVAL DAY(@d)-1 DAY)) / 7 )
得出结果为 31 / 7 = 4.428571428571429
向上取整为 5