
在MySQL中计算两个日期之间的工作日
Excel的NETWORKDAYS()函数提供了一种方便的方法来确定两个指定日期之间有多少个工作日。但是,MySQL缺少类似的内置函数。
为了解决这个问题,以下是一个可以用作替代方案的MySQL表达式:
5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)
登录后复制
此表达式包含以下计算:
-
计算工作日差值: (DATEDIFF(@E, @S) DIV 7) 计算开始日期@S和结束日期@E之间有多少周。除以7得到完整周数,我们将其乘以5以考虑每周的工作日数。
-
计算开始和结束工作日索引: 7 WEEKDAY(@S) 和 7 WEEKDAY(@E) 计算开始日期和结束日期的工作日索引(星期一为0,星期二为1,依此类推)。加1是为了将索引与下面讨论的数字字符串匹配。
-
检索工作日计数: MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) WEEKDAY(@E) 1, 1) 从提供的数字字符串中检索单个字符。此字符表示指定工作日组合之间的工作日数。
提供的数字字符串被构造为表示每个工作日组合(星期一到星期一,星期二到星期二,等等)之间工作日的天数。通过组合工作日索引并检索相应的字符,我们得到工作日计数。
假设和限制:
- 此函数假设@E不早于@S。
- 它忽略公共假日,因此计算的工作日计数对于涉及假日的场景可能不准确。
- 数字字符串是硬编码到表达式中的,如果不同的工作日约定(例如,如果星期日被认为是工作日),则可能需要更新。
以上是如何计算MySQL中两个日期之间的工作日?的详细内容。更多信息请关注PHP中文网其他相关文章!