MySQL:计算给定范围内的天数(不包括周末),包括开始和结束(如果它们是工作日)

时间:2017-05-19 14:32:35

标签: mysql

我知道在某些帖子中已经回答了这个问题,但我的要求却大相径庭。

我想要的是计算范围内的所有工作日,包括开始日期和结束日期。例如:

@s = 2017-05-15, @e = 2017-05-30

使用此查询(我在here上找到):

5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)

这会返回11但我期望的是12:

[15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 29, 30]

可能不计算开始日期或结束日期?

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

因此,根据我的要求,这应该是矩阵:

 | M T W T F S S
-|--------------
M| 1 2 3 4 5 5 5
T| 5 1 2 3 4 4 4
W| 4 5 1 2 3 3 3
T| 3 4 5 1 2 2 2
F| 2 3 4 5 1 1 1
S| 1 2 3 4 5 0 0
S| 1 2 3 4 5 5 0

转换为此字符串:

1234555512344445123333451222234511112345001234550

最后,这个查询解决了我的问题:

SET @s = STR_TO_DATE('2017-5-01', '%Y-%m-%d');
SET @e = STR_TO_DATE('2017-5-31', '%Y-%m-%d');
SET @weekDays = 5 * (DATEDIFF(@e, @s) DIV 7) + MID('1234555512344445123333451222234511112345001234550', 7 * WEEKDAY(@s) + WEEKDAY(@e) + 1, 1);

这给了我正确的结果,从开始日期(@s)tp结束日期(@e)计算所有工作日。

希望将来有人会觉得这有用。