在 MySQL 中高效計算工作日(不包括週末)
許多應用程式需要計算兩個日期之間的工作日數。雖然電子表格軟體通常為此提供內建函數(例如 NETWORKDAYS),但 MySQL 缺乏直接的等效函數。 本文提供了一個簡潔的 MySQL 表達式來完成此任務,並專注於排除週末。 請注意,此解決方案不考慮假期。
MySQL 表達式
要確定日期 @S
(開始日期)和 @E
(結束日期)之間的工作日,請使用以下命令:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
工作原理:
這個表達式巧妙地結合了幾個 MySQL 函式:
DATEDIFF(@E, @S)
: 計算兩個日期之間的總天數。
DIV 7
: 將總天數除以 7,得到完整的周數。
*` 5`:** 將週數乘以 5 以計算每週的五個工作天。
WEEKDAY(@S)
和 WEEKDAY(@E)
: 決定開始日期和結束日期是一週中的哪一天(0 表示星期日,1 表示星期一等)。
*`7 WEEKDAY(@S) WEEKDAY(@E) 1`:** 此計算會產生尋找字串的索引。
MID('0123444401233334012222340111123400012345001234550', ..., 1)
: MID
函數使用計算出的索引從巧妙建構的字串中提取單一數字。該數字表示完整週計算中未捕獲的剩餘工作日(考慮開始和結束時的部分週)。
此方法提供了一種快速有效的方法來估算 MySQL 中的工作日(不包括週末),而無需處理假期的複雜性。 對於包括假期在內的更全面的解決方案,需要一種涉及假期表的更複雜的方法。
以上是如何在不考慮假日的情況下計算 MySQL 中兩個日期之間的工作日?的詳細內容。更多資訊請關注PHP中文網其他相關文章!