ホームページ > データベース > mysql チュートリアル > MySQL で 2 つの日付の間の営業日 (休日を除く) を計算する方法は?

MySQL で 2 つの日付の間の営業日 (休日を除く) を計算する方法は?

Barbara Streisand
リリース: 2025-01-16 18:10:09
オリジナル
793 人が閲覧しました

How to Calculate Business Days Between Two Dates in MySQL (Without Holidays)?

MySQL 関数は 2 つの日付間の営業日数を計算します (休日を除く)

Excel の NETWORKDAYS() 関数は、2 つの日付間の営業日数を簡単に計算できます。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 と同様に、開始日と終了日が同じ場合、営業日数は 0 になります。
  • 休日は考慮されません。

数値文字列の構築:

数値文字列は、月曜日 (WEEKDAY 0) を行と列の開始点として、開始日と終了日のテーブルとして慎重に作成されます。左上隅から右下隅までの対角線にはゼロが埋め込まれており、同じ週内の日付の間に営業日がないことを示します (たとえば、月曜日から月曜日まで)。

斜め右に移動すると、その日が週末 (非稼働日) でない場合に限り、毎日の稼働日が 0 以外の日数になります。行の終わりに達すると、カウントは同じ行の先頭に戻ります。このプロセスは、次の対角線に遭遇するまで続きます。

表現の改善:

修正後の改善された表現は次のとおりです:

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
ログイン後にコピー
ログイン後にコピー

この改良された式では強化された数値文字列が使用され、より正確な結果が得られます。

以上がMySQL で 2 つの日付の間の営業日 (休日を除く) を計算する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート