Excel具有NETWORKDAYS()函数,可以查找两个日期之间的工作日数.
任何人都有类似MySQL的功能?由于假期增加了复杂性,解决方案不必处理假期.
我需要计算MySQL中两个日期之间的差异(以天为单位),不包括周末(周六和周日).也就是说,天数之差减去周六和周日之间的数量.
目前,我只计算使用日期:
SELECT DATEDIFF('2012-03-18', '2012-03-01')
Run Code Online (Sandbox Code Playgroud)
这个回归17,但我想排除周末,所以我想12(因为第3和第4,第10和第11和第17是周末的日子).
我不知道从哪里开始.我知道WEEKDAY()函数和所有相关函数,但我不知道如何在这种情况下使用它们.
我搜索了很多例子,我得到了很好的例子:
但是没有得到最有希望的解决方案,所以我可以在我的mysql函数中使用来查询行的十万行.
这个是一个非常新的概念,但是没有像@start_date = '2013-08-03' , @end_date = '2013-08-21'预期的答案那样起作用:13,它只给出12,
SELECT 5 * (DATEDIFF(@end_date, @start_date) DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY(@start_date) + WEEKDAY(@end_date) + 1, 1);
Run Code Online (Sandbox Code Playgroud)
所以我试着自己做 -
Concept :
Input : 1. period_from_date - from date
2. period_to_date - to date
3. days_to_exclude - mapping : S M T W TH F Sat => 2^0 + 2^6
(sat and sun to exclude) ^ ^ ^ ^ ^ ^ ^
0 1 2 3 4 …Run Code Online (Sandbox Code Playgroud) 我正在寻找解决方案,如何选择两个日期之间没有周末和公众假期的天数。
到目前为止,我有这个:
SELECT evnt.event_id,
evnt.date_from,
evnt.date_to,
DATEDIFF(DD, evnt.date_from, evnt.date_to)
- (DATEDIFF(WK, evnt.date_from, evnt.date_to) * 2)
- CASE WHEN DATEPART(DW, evnt.date_from) = 1 THEN 1 ELSE 0 END
+ CASE WHEN DATEPART(DW, evnt.date_to) = 1 THEN 1 ELSE 0 END AS Date_Diff
--- COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to
FROM events AS evnt
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我取消注释部分:
- COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to
Run Code Online (Sandbox Code Playgroud)
我想要实现的是在日期范围内获得工作日数。问题出在最后一步,我试图从该范围中减去所有公共假日。
谁能在最后一步提供帮助?看来,我做错了,但我不知道该怎么办。
先感谢您