MySQL での日付範囲の効率的な比較
このガイドでは、ターゲット範囲と事前定義された一連の範囲の間の重複の特定に重点を置き、MySQL で日付範囲を効率的に比較する方法を説明します。
簡略化されたアプローチ
範囲の重複を直接比較する代わりに、より効率的な方法として、非重複をチェックする方法があります。 これにより、論理プロセスが簡素化されます。
重複する範囲について
事前定義された範囲がターゲット範囲に対して次の条件のいずれかを満たした場合、オーバーラップが発生します。
重複しない範囲の特定
逆に、重複しない範囲は次の条件を満たします。
重複範囲の SQL クエリ
ターゲット範囲 (periods
、range_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 サイトの他の関連記事を参照してください。