备注:测试数据库版本为MySQL 8.0
一.需求:
计算当前月的第一个星期一及最后一个星期一的日期。
二.解决方案
这里选用了Monday和当前月,也可以将该解决方案应用于其他日子和月份。
由于每个相同的周内日期的间隔都是7天,所以知道第一个后,加7就能知道第二个,加14天就能知道第三个。
同样,如果制动啊某个月的最后一个指定的周期内日期,则减7就能得到第三个,再减7就能得到第二个。
使用函数adddate,找到当月的第一天。
得到当前月的第一天之后,可以使用简单的算法和表示星期几的数学值(星期日-星期六分别对应1-7),
以获得当前月的第一个和最后一个星期一:
select first_monday,
case month(adddate(first_monday,28))
when mth then adddate(first_monday,28)
else adddate(first_monday,21)
end last_monday
from (
select case sign(dayofweek(dy) -2)
when 0 then dy
when -1 then adddate(dy,abs(dayofweek(dy) -2))
when 1 then adddate(dy,(7-(dayofweek(dy) -2)))
end first_monday,
mth
from (
select adddate(adddate(current_date,-day(current_date)),1) dy,
month(current_