_SQL 如何得到两个日期间的工作日(附假期表)_关联假期表统计工作_
🌟 问题背景
工作中常常需要计算两个日期之间的有效工作日,但如何排除周末和节假日呢?比如你需要知道某个项目从启动到完成期间有多少个工作日,这时就需要借助SQL查询来搞定啦!下面分享一个简单又实用的方法。
📅 核心思路
首先,我们需要一张包含所有节假日的表格(如holiday_table),然后通过日期范围生成一张连续日期表(date_table)。接着将两表关联起来,过滤掉非工作日即可。
🔍 具体步骤
1️⃣ 创建holiday_table:包含holiday_date字段存储节假日日期。
2️⃣ 构造date_table:使用递归CTE生成指定日期区间内的每一天。
3️⃣ 查询有效工作日:排除周六、周日以及holiday_table中的日期。
💡 示例代码
```sql
WITH RECURSIVE date_series AS (
SELECT start_date AS dt
FROM calendar_table
UNION ALL
SELECT dt + INTERVAL 1 DAY
FROM date_series
WHERE dt < end_date
)
SELECT COUNT() AS workdays
FROM date_series
WHERE WEEKDAY(dt) < 5 -- 周一至周五
AND dt NOT IN (SELECT holiday_date FROM holiday_table);
```
🎯 总结
通过上述方法,你可以轻松统计任意日期范围内的工作日数量,并且结合实际业务需求灵活调整逻辑。无论是项目管理还是数据分析,这个技巧都能帮上大忙哦!💪