You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7 如何统计两个日期间按月份拆分的工作日(周一至周五)天数

调整方案

MySQL 5.7可以用DAYOFWEEK()函数判断日期对应的星期:该函数返回值范围是1~7,其中1代表周日,7代表周六,你只需要在原SQL的子查询过滤条件中新增周末排除逻辑即可。

另外原SQL的ORDER BY子句有多余的逗号已同步修正,如果你的start、end字段是存储为DD/MM/YY格式的字符串,需要先用STR_TO_DATE()转成日期类型避免计算出错,完整修改后的SQL如下:

SELECT 
  id_employee,
  EXTRACT(YEAR_MONTH FROM t.Date) as YearMonth,
  COUNT(1) as Days
FROM (
  SELECT 
    v.employee as id_employee,
    -- 如果start是字符串类型,替换成:DATE_ADD(STR_TO_DATE(v.start, '%d/%m/%y'), interval s.seq - 1 DAY) AS Date
    DATE_ADD(v.start, interval s.seq - 1 DAY) AS Date
  FROM vacations v
  CROSS JOIN seq_1_to_100 s
  WHERE 
    DATE_ADD(v.start, interval s.seq - 1 DAY) <= v.end
    -- 排除周六、周日
    AND DAYOFWEEK(DATE_ADD(v.start, interval s.seq - 1 DAY)) NOT IN (1,7)
  ORDER BY v.employee, v.start, s.seq
) t
GROUP BY id_employee, EXTRACT(YEAR_MONTH FROM t.Date)

验证说明

你给出的员工1001示例,休假时间从2021-10-26到2021-11-22,排除周末后10月工作日共4天、11月工作日共16天,和你预期的输出结果完全匹配。

内容的提问来源于stack exchange,提问作者Andrea Duran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:01