ホームページ >データベース >mysql チュートリアル >休日テーブルを使用せずに、MySQL で 2 つの日付の間の営業日を効率的に計算するにはどうすればよいですか?
MySQL 営業日カウント関数
Excel の NETWORKDAYS() 関数を使用すると、指定した 2 つの日付間の営業日数を効率的に計算できます。 MySQL では、同様の関数、特に簡素化のために休日を除外した関数が必要になることがよくあります。
1 つの方法は、次の式を使用することです:
<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 の 2 つの日付間の営業日数を効率的にカウントできます。
以上が休日テーブルを使用せずに、MySQL で 2 つの日付の間の営業日を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。