ホームページ >データベース >mysql チュートリアル >休日テーブルを使用せずに、MySQL で 2 つの日付の間の営業日を効率的に計算するにはどうすればよいですか?

休日テーブルを使用せずに、MySQL で 2 つの日付の間の営業日を効率的に計算するにはどうすればよいですか?

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() 関数を使用すると、指定した 2 つの日付間の営業日数を効率的に計算できます。 MySQL では、同様の関数、特に簡素化のために休日を除外した関数が必要になることがよくあります。

1 つの方法は、次の式を使用することです:

<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 と同様に機能し、開始日と終了日が同じ場合、稼働日数は 0 になります。
  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 の 2 つの日付間の営業日数を効率的にカウントできます。

以上が休日テーブルを使用せずに、MySQL で 2 つの日付の間の営業日を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。