📅  最后修改于: 2023-12-03 15:27:50.994000             🧑  作者: Mango
如果需要获取每月的第一个星期一的日期,可以使用以下SQL语句来实现。
SELECT DATE_ADD(date, INTERVAL 7-(DAYOFWEEK(date)-1) DAY) AS first_monday FROM (
SELECT DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 1 DAY) AS date
) t
代码分解:
LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH))
获取上个月的最后一天;DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 1 DAY)
获取上个月最后一天的后一天,也就是这个月的第一天;DATE_ADD(date, INTERVAL 7-(DAYOFWEEK(date)-1) DAY)
将这个月的第一天与第一个星期一日期相减,再将差值加上七天,即可得到第一个星期一的日期。SELECT DATE_SUB(date, INTERVAL (DAY(date) - 1 + MOD(8 - DAYOFWEEK(date), 7)) DAY) AS first_monday FROM (
SELECT LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AS date
) t
代码分解:
LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH))
获取上个月的最后一天;DAY(date)
获取这个月的第一天是几号;MOD(8 - DAYOFWEEK(date), 7)
获取这个月的第一天与第一个星期一之间的天数差值;DAY(date) - 1 + MOD(8 - DAYOFWEEK(date), 7)
计算得到这个月第一个星期一之前的日期;DATE_SUB(date, INTERVAL (DAY(date) - 1 + MOD(8 - DAYOFWEEK(date), 7)) DAY)
将第一个星期一之前的天数差值从这个月的第一天中减去,即可得到第一个星期一的日期。以上两种方法均可用于MySQL和MariaDB数据库。