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。到达行尾后,计数器重置,并继续此过程,直到再次到达对角线。
例如,假设星期六和星期日是非工作日:
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中文网其他相关文章!