首頁 >資料庫 >mysql教程 >如何計算MySQL中兩個日期之間的工作日(不含假日)?

如何計算MySQL中兩個日期之間的工作日(不含假日)?

Barbara Streisand
Barbara Streisand原創
2025-01-16 18:10:09797瀏覽

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

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