📜  获取每月的第一个星期一 sql (1)

📅  最后修改于: 2023-12-03 15:27:50.994000             🧑  作者: Mango

获取每月的第一个星期一 SQL

如果需要获取每月的第一个星期一的日期,可以使用以下SQL语句来实现。

方法一:使用WEEKDAY和DAYOFWEEK函数
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) 将这个月的第一天与第一个星期一日期相减,再将差值加上七天,即可得到第一个星期一的日期。
方法二:使用DAY函数和MOD运算符
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数据库。