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

如何基于现有两表生成仅包含2020年工作日(排除周末及法定假日)的新表

2020年有效工作日表生成方案

前置说明

默认你需要覆盖的日期范围和第一张表的录入范围一致(当前为2020年1-3月),如果需要生成全年数据,先把第一张表的月份范围补全到1-12月即可,以下方案逻辑通用。

方案1:SQL实现(适用数据存储在关系型数据库的场景)

  • 第一步:通过月份日期范围表生成对应时间区间的连续日期序列
  • 第二步:为所有日期匹配星期、默认工作类型和工作时长
  • 第三步:过滤掉周末、以及法定假日表中存在的记录
    通用SQL示例(以MySQL语法为例):
WITH RECURSIVE full_date_range AS (
    -- 取时间区间最小起始日期
    SELECT MIN(`Date from`) AS cur_date FROM 2020年月份日期范围表
    UNION ALL
    -- 递归生成连续日期
    SELECT DATE_ADD(cur_date, INTERVAL 1 DAY) 
    FROM full_date_range 
    WHERE cur_date < (SELECT MAX(`Date to`) FROM 2020年月份日期范围表)
)
SELECT 
    fdr.cur_date AS `Date`,
    DAYNAME(fdr.cur_date) AS `Week day`,
    'WorkingDay' AS `Code`,
    8 AS `Working hours` -- 可根据实际工作日时长调整
FROM full_date_range fdr
-- 排除法定假日
LEFT JOIN 2020年法定假日表 hol 
    ON fdr.cur_date = hol.Date
WHERE hol.Date IS NULL
-- 排除周末(1=周日,7=周六,不同数据库取值规则可自行调整)
AND DAYOFWEEK(fdr.cur_date) NOT IN (1,7)

方案2:Excel实现(适用数据存储在本地Excel表格的场景)

操作步骤:

  1. 生成连续日期序列:提取第一张表的最小起始日期和最大结束日期,在空白列首行填入起始日期,下拉生成完整连续日期
  2. 补全对应字段:
    • 星期:用WEEKDAY(日期单元格,2)函数计算,返回值6、7对应周六、周日
    • Code字段默认填WorkingDay
    • Working hours字段默认填8(可根据实际调整)
  3. 过滤无效日期:
    • 先筛选删除WEEKDAY结果为6、7的周末记录
    • 再用VLOOKUP(日期单元格, 法定假日表日期列, 1, 0)匹配法定假日,筛选删除匹配到结果的记录
  4. 剩余的内容复制出来就是符合格式要求的有效工作日表

小提示:如果存在调休补班的情况,可额外在过滤后新增补班日期的记录,调整对应工作时长即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:39:00