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

PostgreSQL で重複する日付範囲を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-05 10:41:40
オリジナル
687 人が閲覧しました

How Can I Efficiently Find Overlapping Date Ranges in 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 サイトの他の関連記事を参照してください。

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