ホームページ >データベース >mysql チュートリアル >PostgreSQL で重複する日付範囲を効率的に見つけるにはどうすればよいですか?
PostgreSQL での重複する日付範囲の検索
PostgreSQL で日付範囲を操作する場合、重複を特定することは重要なタスクです。指定されたクエリは、特定の年にチームに所属していたプレーヤーを検索しようとしましたが、エラーが含まれています。
指定されたクエリの問題
クエリには BETWEEN 条件が含まれています ( DATE_PART('YEAR',date_join) >= AND DATE_PART('YEAR',date_leave) <= ?)、date_join 列と date_leave 列の年のコンポーネントが指定された範囲内にあるかどうかをチェックします。ただし、上限 (年末) を含む >= および <= 演算子が誤って使用されています。
修正されたクエリ
重複を正しく検出するには範囲を超える場合は、上限を除外するように条件を調整する必要があります。 bound:
SELECT * FROM contract JOIN team USING (name_team) JOIN player USING(name_player) WHERE name_team = ? AND DATE_PART('YEAR',date_join) >= ? AND DATE_PART('YEAR',date_leave) < ?</p> <p><strong>範囲型を使用した代替ソリューション</strong></p> <p>PostgreSQL バージョン 9.2 以降では、範囲型がサポートされています。以下に、範囲タイプと &&& 演算子を利用して重複する範囲を検索するクエリを示します。</p> <pre class="brush:php;toolbar:false">SELECT DISTINCT name_player FROM contract WHERE name_team = ? AND daterange(date_join, date_leave) &&& daterange '[2009-01-01,2010-01-01)'
このクエリは、重複演算子 &&& と特別に定義された範囲タイプを利用して、明示的な境界を必要とせずに重複する日付範囲を検索します。チェックします。
以上がPostgreSQL で重複する日付範囲を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。