在 MySQL 中高效计算工作日(不包括周末)
许多应用程序需要计算两个日期之间的工作日数。虽然电子表格软件通常为此提供内置函数(例如 NETWORKDAYS),但 MySQL 缺乏直接的等效函数。 本文提供了一个简洁的 MySQL 表达式来完成此任务,重点关注排除周末。 请注意,此解决方案不考虑假期。
MySQL 表达式
要确定日期 @S
(开始日期)和 @E
(结束日期)之间的工作日,请使用以下命令:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
工作原理:
这个表达式巧妙地结合了几个 MySQL 函数:
DATEDIFF(@E, @S)
: 计算两个日期之间的总天数。
DIV 7
: 将总天数除以 7,得到完整的周数。
*` 5`:** 将周数乘以 5 以计算每周的五个工作日。
WEEKDAY(@S)
和 WEEKDAY(@E)
: 确定开始日期和结束日期是一周中的哪一天(0 表示星期日,1 表示星期一等)。
*`7 WEEKDAY(@S) WEEKDAY(@E) 1`:** 此计算生成查找字符串的索引。
MID('0123444401233334012222340111123400012345001234550', ..., 1)
: MID
函数使用计算出的索引从巧妙构造的字符串中提取单个数字。该数字表示完整周计算中未捕获的剩余工作日(考虑开始和结束时的部分周)。
此方法提供了一种快速有效的方法来估算 MySQL 中的工作日(不包括周末),而无需处理假期的复杂性。 对于包括假期在内的更全面的解决方案,需要一种涉及假期表的更复杂的方法。
以上是如何在不考虑节假日的情况下计算 MySQL 中两个日期之间的工作日?的详细内容。更多信息请关注PHP中文网其他相关文章!