首页 >数据库 >mysql教程 >如何在不考虑节假日的情况下计算 MySQL 中两个日期之间的工作日?

如何在不考虑节假日的情况下计算 MySQL 中两个日期之间的工作日?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-16 18:13:14304浏览

How Can I Calculate Business Days Between Two Dates in MySQL Without Considering Holidays?

在 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 函数:

  1. DATEDIFF(@E, @S): 计算两个日期之间的总天数。

  2. DIV 7: 将总天数除以 7,得到完整的周数。

  3. *` 5`:** 将周数乘以 5 以计算每周的五个工作日。

  4. WEEKDAY(@S)WEEKDAY(@E): 确定开始日期和结束日期是一周中的哪一天(0 表示星期日,1 表示星期一等)。

  5. *`7 WEEKDAY(@S) WEEKDAY(@E) 1`:** 此计算生成查找字符串的索引。

  6. MID('0123444401233334012222340111123400012345001234550', ..., 1): MID 函数使用计算出的索引从巧妙构造的字符串中提取单个数字。该数字表示完整周计算中未捕获的剩余工作日(考虑开始和结束时的部分周)。

此方法提供了一种快速有效的方法来估算 MySQL 中的工作日(不包括周末),而无需处理假期的复杂性。 对于包括假期在内的更全面的解决方案,需要一种涉及假期表的更复杂的方法。

以上是如何在不考虑节假日的情况下计算 MySQL 中两个日期之间的工作日?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn