首頁 >資料庫 >mysql教程 >如何在不使用假日表的情況下有效計算 MySQL 中兩個日期之間的工作日?

如何在不使用假日表的情況下有效計算 MySQL 中兩個日期之間的工作日?

DDD
DDD原創
2025-01-16 17:54:12414瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn