Excel 具有 NETWORKDAYS() 函数,可查找两个日期之间的工作日数。
有人对 MySQL 有类似的功能吗?由于假期增加了复杂性,因此解决方案不必处理假期。
原文由 Yada 发布,翻译遵循 CC BY-SA 4.0 许可协议
Excel 具有 NETWORKDAYS() 函数,可查找两个日期之间的工作日数。
有人对 MySQL 有类似的功能吗?由于假期增加了复杂性,因此解决方案不必处理假期。
原文由 Yada 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 MySQL 8.x 中(长版本 - 自解释)
WITH
setup AS (
SELECT ('2022-09-01') first_day, LAST_DAY('2022-09-01') last_day
),
cte AS (
SELECT s.first_day, s.last_day,
WEEK(s.first_day) first_week, WEEK(s.last_day) last_week
FROM setup s
)
SELECT first_day, last_day, DATEDIFF(last_day, first_day) days_between,
(DATEDIFF(last_day, first_day) - 2 * (last_week - first_week) + 1) workdays
FROM cte;
简而言之:
WITH
cte AS (
SELECT
('2022-09-01')first_day, ('2022-09-30')last_day,
WEEK('2022-09-01') first_week, WEEK('2022-09-30') last_week
)
SELECT (DATEDIFF(last_day, first_day) - 2 * (last_week - first_week) + 1) workdays_without_hollidays
FROM cte;
原文由 Marek Lisiecki 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
这个表达——
计算开始日期@S 和结束日期@E 之间的工作日数。
假设结束日期 (@E) 不早于开始日期 (@S)。与 DATEDIFF 兼容,因为相同的开始日期和结束日期给出了零个工作日。忽略节假日。
数字串的构造如下。创建一个开始日期和结束日期的表,行必须从星期一开始(WEEKDAY 0),列也必须从星期一开始。从左上角到右下角的对角线全部填0(即周一到周一、周二到周二等有0个工作日)。对于每一天,从对角线开始(必须始终为 0)并填写右侧的列,一次一天。如果您登陆周末(非工作日)列,则工作日数不会改变,它是从左侧开始的。否则,工作日数增加一。当您到达行的末尾时,循环回到同一行的开头并继续,直到您再次到达对角线。然后继续下一行。
例如,假设周六和周日不是工作日 -
然后将表中的 49 个值连接到字符串中。
如果您发现任何错误,请告诉我。
- 编辑改进表:
改进的字符串:’0123444401233334012222340111123400001234000123440’
改进的表达: