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