计算两个日期之间的天数,不包括周末(仅限MySQL)

lor*_*o-s 3 mysql datediff date weekend

我需要计算MySQL中两个日期之间的差异(以天为单位),不包括周末(周六和周日).也就是说,天数之差减去周六和周日之间的数量.

目前,我只计算使用日期:

SELECT DATEDIFF('2012-03-18', '2012-03-01')
Run Code Online (Sandbox Code Playgroud)

这个回归17,但我想排除周末,所以我想12(因为第3和第4,第10和第11和第17是周末的日子).

我不知道从哪里开始.我知道WEEKDAY()函数和所有相关函数,但我不知道如何在这种情况下使用它们.

pol*_*1er 9

只需使用一个简单的功能尝试:

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);
Run Code Online (Sandbox Code Playgroud)

测试:

SELECT TOTAL_WEEKDAYS('2013-08-03', '2013-08-21') weekdays1,
       TOTAL_WEEKDAYS('2013-08-21', '2013-08-03') weekdays2;
Run Code Online (Sandbox Code Playgroud)

结果:

| WEEKDAYS1 | WEEKDAYS2 |
-------------------------
|        13 |        13 |
Run Code Online (Sandbox Code Playgroud)