MySQL 函数计算两个日期之间的工作日数(不含节假日)
Excel 的 NETWORKDAYS() 函数可以方便地计算两个日期之间的工作日数,MySQL 也需要类似的功能。虽然处理节假日比较复杂,但这里要求一个简化的解决方案,不考虑节假日。
解决方案:
以下表达式有效地计算开始日期 @S 和结束日期 @E 之间的工作日数:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
假设和注意事项:
数字字符串的构造:
数字字符串是精心构造的,作为一个开始日期和结束日期的表格,以星期一 (WEEKDAY 0) 作为行和列的起始点。从左上角到右下角的对角线填充为零,表示同一周内日期之间没有工作日(例如,星期一到星期一)。
从对角线向右移动,只有当该天不是周末(非工作日)时,每一天的工作日计数才非零。当到达行尾时,计数会回到同一行的开头。这个过程会持续到遇到下一条对角线为止。
改进后的表达式:
经过修改后,改进后的表达式为:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
这个改进后的表达式使用增强的数字字符串,提供了更准确的结果。
以上是如何计算MySQL中两个日期之间的工作日(不含节假日)?的详细内容。更多信息请关注PHP中文网其他相关文章!