我知道在某些帖子中已经回答了这个问题,但我的要求却大相径庭。
我想要的是计算范围内的所有工作日,包括开始日期和结束日期。例如:
@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]
可能不计算开始日期或结束日期?
有人有想法吗?
答案 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
)计算所有工作日。
希望将来有人会觉得这有用。