场景描述:
已知某一个具体日期,想要知道离它最近的下一个星期一,用SQL怎么写?
比如:想要知道离2023/1/1最近的下一个星期一是几号?
SQL步骤拆解:
第1步:假设有这么一个表,表名为date_info
第2步:获取最终结果
select id
,date
,date_add(date_sub(date ,interval weekday(date) day) ,interval 7 day) as next_monday
from date_info
输入上方的SQL语句,最终你将得到下面这些结果
原理解释:
其实原理很简单,就是
使用函数weekday获取某一天的具体星期数,它是周几。
比如2023-01-01就是 weekday(date)
注意:使用weekday函数获取的星期数的值是从0开始计算的,所以它的星期一是0(如2023-01-02是星期一),星期日是6(如2023-01-01)。
再用当天减去它自身的星期数,得到这一天所在星期的周一的具体日期
date_sub(date ,interval weekday(date) day)
最后就是添砖加瓦的过程了,比如想要获得下个星期一,就+7天;想要获得下一个星期三,就+9天
date_add(date_sub(date ,interval weekday(date) day) ,interval 7 day)