首页 > 数据库 > mysql教程 > 如何在不使用假日表的情况下高效计算 MySQL 中两个日期之间的工作日?

如何在不使用假日表的情况下高效计算 MySQL 中两个日期之间的工作日?

DDD
发布: 2025-01-16 17:54:12
原创
411 人浏览过

How Can I Efficiently Calculate Business Days Between Two Dates in MySQL Without Using a Holiday Table?

MySQL工作日计数函数

Excel的NETWORKDAYS()函数可以高效地计算两个指定日期之间工作日的数量。在MySQL中,经常需要类似的函数,尤其是一个为了简便起见而排除节假日的函数。

一种方法是使用以下表达式:

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

要有效地使用此表达式:

  1. 确保结束日期(@E)不早于开始日期(@S)。
  2. 此表达式的作用类似于DATEDIFF,如果开始日期和结束日期相同,则工作日数量为零。
  3. 请注意,此方法不考虑节假日。

提供的数字字符串是通过创建一个开始日期和结束日期的表格构建的,表格以星期一开始,按行和列排列。表格以对角线方式填充零,表示同一天类型之间(例如,星期一到星期一)没有工作日。

对于每一天,工作日数量的计算方法是从对角线沿行向右移动。如果遇到非工作日(周末),则数字不变。否则,它递增1。到达行尾后,计数器重置,并继续此过程,直到再次到达对角线。

例如,假设星期六和星期日是非工作日:

M T W T F S S
M 0 1 2 3 4 4 4
T 4 0 1 2 3 3 3
W 3 4 0 1 2 2 2
T 2 3 4 0 1 1 1
F 1 2 3 4 0 0 0
S 0 1 2 3 4 0 0
S 0 1 2 3 4 4 0

将此表中的49个值连接起来,就产生了表达式中使用的字符串。

此解决方案不考虑节假日,但它可以高效地计算MySQL中两个日期之间工作日的数量。

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

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