ホームページ >データベース >mysql チュートリアル >SQL で重複する日付範囲を効率的に特定するにはどうすればよいでしょうか?
SQL の日付範囲の比較
データベースに保存されている日付範囲を操作する場合、特定の日付範囲が既存の範囲と重複するかどうかを判断する必要がある場合があります。これは SQL データベースで繰り返し発生する問題です。
この問題を解決する 1 つの方法は、比較ロジックを反転することです。特定の範囲と重複する範囲を検索するのではなく、重複しない範囲を検索します。重複しない期間を特定することで、残りの期間が重複する期間であると結論付けることができます。
このロジックを説明するために、次の例を見てみましょう:
<code> |-------------------| 与之比较 |---------| 包含在内 |----------| 包含在内,起始时间相同 |-----------| 包含在内,结束时间相同 |-------------------| 包含在内,起始和结束时间相同 |------------| 未完全包含,起始时间重叠 |---------------| 未完全包含,结束时间重叠 |-------------------------| 起始时间重叠,范围更大 |-----------------------| 结束时间重叠,范围更大 |------------------------------| 完全重叠</code>
図からわかるように、比較期間と重複しない期間は、比較期間の終了後に開始するか、比較期間の開始前に終了します。
対照的に、比較期間と重複する期間は次のカテゴリに分類されます:
このロジックを SQL に変換すると、次のクエリを使用して、指定されたチェック エポックと重複するすべてのエポックを取得できます。
<code class="language-sql">SELECT * FROM periods WHERE range_start < @check_period_end AND range_end > @check_period_start;</code>
ロジックを逆にして、重複しないエポックを見つけることで、これらのエポックを効果的に特定して結果から除外し、一致するエポックのリストを残すことができます。
以上がSQL で重複する日付範囲を効率的に特定するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。