ホームページ > データベース > mysql チュートリアル > MySQL で日付範囲を効率的に比較するにはどうすればよいですか?

MySQL で日付範囲を効率的に比較するにはどうすればよいですか?

DDD
リリース: 2025-01-18 08:21:09
オリジナル
927 人が閲覧しました

How Can I Efficiently Compare Date Ranges in MySQL?

MySQL での日付範囲の効率的な比較

このガイドでは、ターゲット範囲と事前定義された一連の範囲の間の重複の特定に重点を置き、MySQL で日付範囲を効率的に比較する方法を説明します。

簡略化されたアプローチ

範囲の重複を直接比較する代わりに、より効率的な方法として、重複をチェックする方法があります。 これにより、論理プロセスが簡素化されます。

重複する範囲について

事前定義された範囲がターゲット範囲に対して次の条件のいずれかを満たした場合、オーバーラップが発生します。

  • 完全な封じ込め: 事前定義された範囲は完全にターゲット範囲内に収まります。
  • 部分的重複: 事前定義された範囲は、開始点または終了点のいずれかで重複します。
  • 完全なオーバーラップ: 事前定義された範囲はターゲット範囲を完全に包含します。

重複しない範囲の特定

逆に、重複しない範囲は次の条件を満たします。

  • Precedes Target: 事前定義された範囲は、ターゲット範囲が始まる前に終了します。
  • ターゲットに従う: 事前定義された範囲は、ターゲット範囲が終了した後に開始されます。

重複範囲の SQL クエリ

ターゲット範囲 (periodsrange_start) と重複する range_end テーブル (@check_period_start および @check_period_end 列を含む) 内のすべての行を識別するには:

<code class="language-sql">SELECT *
FROM periods
WHERE NOT (range_start > @check_period_end OR range_end < @check_period_start);</code>
ログイン後にコピー

NOT 演算子は条件を反転し、重複が存在する行のみを効果的に選択します。

代替クエリ: 直接重複チェック

または、重複する行を直接選択するには:

<code class="language-sql">SELECT *
FROM periods
WHERE range_start <= @check_period_end AND range_end >= @check_period_start;</code>
ログイン後にコピー

このクエリは、事前定義された範囲の開始点がターゲット範囲の終了点より前かそれと等しいか、また、事前定義された範囲の終了点がターゲット範囲の開始点よりも後かそれと等しいかどうかを直接チェックします。 このアプローチは、人によってはもう少し読みやすいかもしれません。

以上がMySQL で日付範囲を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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