_SQL 如何得到两个日期间的工作日(附假期表)_关联假期表统计工作_

互联科技科普 2025-03-24 16:19:30
导读 🌟 问题背景工作中常常需要计算两个日期之间的有效工作日,但如何排除周末和节假日呢?比如你需要知道某个项目从启动到完成期间有多少个工...
2025-03-24 16:19:30

🌟 问题背景

工作中常常需要计算两个日期之间的有效工作日,但如何排除周末和节假日呢?比如你需要知道某个项目从启动到完成期间有多少个工作日,这时就需要借助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);

```

🎯 总结

通过上述方法,你可以轻松统计任意日期范围内的工作日数量,并且结合实际业务需求灵活调整逻辑。无论是项目管理还是数据分析,这个技巧都能帮上大忙哦!💪

免责声明:本文由用户上传,如有侵权请联系删除!