ホームページ >データベース >mysql チュートリアル >MySQL で重複する日付範囲を特定する方法?

MySQL で重複する日付範囲を特定する方法?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 13:12:10167ブラウズ

How to Identify Overlapping Date Ranges in MySQL?

MySQL で重複する日付範囲を特定する

問題:

イベント セッションとそれぞれの開始日と終了日。セッション間で競合が発生しないようにすることを目指しています。具体的には、指定された日付範囲内で新しいセッションを挿入しようとするときに、重複するセッションを検索します。

クエリ:

潜在的な競合を特定するには、次のクエリ:

SELECT *
FROM session
WHERE "2010-01-05" BETWEEN start_date AND end_date
   OR "2010-01-25" BETWEEN start_date AND end_date
   OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date;

クエリ:

このクエリは、重複の可能性を示す 3 つの条件をチェックします:

  1. 提案された開始日 (「2010-01-05」) が既存のセッションの範囲内にある場合日付範囲 (開始日と終了日の間)。
  2. 提案された終了日の場合(「2010-01-25」) は、既存のセッションの日付範囲 (開始日と終了日の間) 内にあります。
  3. 提案された日付範囲 (「2010-01-05」から「2010-01-25」まで) の場合") が既存のセッションの日付範囲 (>= start_date AND <=) と完全に重複しています。 end_date).

代替アプローチ:

正確な結果を保証する代替クエリ:

SELECT *
FROM session
WHERE new_start < existing_end
      AND new_end   > existing_start;

説明:

このクエリは、4 つの要素に基づく論理評価を利用します。変数:

  • new_start: 提案されたセッションの開始日 ("2010-01-05")。
  • new_end: 提案されたセッションの終了日 ("2010-01 -25").
  • existing_start: 既存のサービスの開始日session.
  • existing_end: 既存のセッションの終了日。

新しいセッションの開始日が既存のセッションの終了日より前である場合、クエリは重複するセッションを返します。新しいセッションの終了日は、既存のセッションの開始日より後です。

以上がMySQL で重複する日付範囲を特定する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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