计算 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中文网其他相关文章!