在mysql中 计算两个日期之间的工作日天数
时间: 2024-09-12 18:17:42 浏览: 112
MySQL计算两日期之间的工作日
5星 · 资源好评率100%
在MySQL中,计算两个日期之间的工作日天数可以使用DATEDIFF函数结合一些条件判断。假设你想排除周末(周六和周日),你可以这样做:
```sql
SELECT COUNT(*) AS work_days
FROM (
SELECT @row_number := IF(@date <= DATE(your_date_field), @row_number + 1, 1) as row_num,
your_date_field
FROM your_table
JOIN (SELECT @row_number:=0, @date:=MIN(your_date_field) as start_date) t1
ORDER BY your_date_field
) subquery
WHERE WEEKDAY(your_date_field) NOT IN (5, 6); -- 5代表周六,6代表周日
```
这个查询首先创建了一个递增的行号`row_num`,然后只对工作日(非周六和周日)计数。结果就是两个日期之间的工作日总数。
如果你的数据库支持LEAD()或LAG()函数,也可以简化一些,例如在PostgreSQL中:
```sql
WITH work_days AS (
SELECT your_date_field,
LEAD(your_date_field) OVER (ORDER BY your_date_field) - your_date_field AS diff
FROM your_table
)
SELECT SUM(CASE WHEN extract(dow FROM diff) BETWEEN 1 AND 4 THEN 1 ELSE 0 END) AS work_days
FROM work_days
WHERE your_date_field >= 'start_date' AND your_date_field < 'end_date';
```
这里我们检查了每一天的星期几,并仅累加工作日(周一到周五)。
阅读全文