首页 > 数据库 > mysql教程 > 如何计算MySQL中两个日期之间的工作日(不含节假日)?

如何计算MySQL中两个日期之间的工作日(不含节假日)?

Barbara Streisand
发布: 2025-01-16 18:10:09
原创
793 人浏览过

How to Calculate Business Days Between Two Dates in MySQL (Without Holidays)?

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>
登录后复制
登录后复制

假设和注意事项:

  • 结束日期 (@E) 不能早于开始日期 (@S)。
  • 与 DATEDIFF 类似,开始日期和结束日期相同,则工作日数为零。
  • 未考虑节假日。

数字字符串的构造:

数字字符串是精心构造的,作为一个开始日期和结束日期的表格,以星期一 (WEEKDAY 0) 作为行和列的起始点。从左上角到右下角的对角线填充为零,表示同一周内日期之间没有工作日(例如,星期一到星期一)。

从对角线向右移动,只有当该天不是周末(非工作日)时,每一天的工作日计数才非零。当到达行尾时,计数会回到同一行的开头。这个过程会持续到遇到下一条对角线为止。

改进后的表达式:

经过修改后,改进后的表达式为:

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
登录后复制
登录后复制

这个改进后的表达式使用增强的数字字符串,提供了更准确的结果。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板