首页  >  文章  >  数据库  >  如何计算MySQL中两个日期之间的工作日数(不包括周末)?

如何计算MySQL中两个日期之间的工作日数(不包括周末)?

DDD
DDD原创
2024-11-02 10:06:02208浏览

How to Calculate the Number of Weekdays Between Two Dates in MySQL, Excluding Weekends?

计算 MySQL 中不包括周末的日期之间的天数

在 MySQL 中,使用 DATEDIFF 函数计算两个日期之间的差异非常简单。然而,从计算中排除周末(周六和周日)可能具有挑战性。

为了实现这一点,我们可以利用 WEEKDAY 函数和自定义函数来简化过程。

创建自定义函数

我们可以创建一个名为 TOTAL_WEEKDAYS 的函数,它接受两个日期参数(date1 和 date2)并返回它们之间的工作日数:

CREATE FUNCTION TOTAL_WEEKDAYS(date1 DATE, date2 DATE)
RETURNS INT
RETURN ABS(DATEDIFF(date2, date1)) + 1
     - ABS(DATEDIFF(ADDDATE(date2, INTERVAL 1 - DAYOFWEEK(date2) DAY),
                    ADDDATE(date1, INTERVAL 1 - DAYOFWEEK(date1) DAY))) / 7 * 2
     - (DAYOFWEEK(IF(date1 < date2, date1, date2)) = 1)
     - (DAYOFWEEK(IF(date1 > date2, date1, date2)) = 7);

该函数计算两个日期之间的绝对差,加一以包含开始日期和结束日期,然后减去该时间段内出现的周末总数。额外的减法考虑了开始或结束日期为周末的情况。

用法示例

要使用 TOTAL_WEEKDAYS 函数,只需使用所需的日期调用它:

SELECT TOTAL_WEEKDAYS('2013-08-03', '2013-08-21') weekdays1,
       TOTAL_WEEKDAYS('2013-08-21', '2013-08-03') weekdays2;

结果

WEEKDAYS1 WEEKDAYS2
13 13

如您所见,该函数准确计算给定日期之间的工作日数,不包括周末。

以上是如何计算MySQL中两个日期之间的工作日数(不包括周末)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn