sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで重複する日付をテストする方法

    PostgreSQLでは、 OVERLAPSを使用できます 重複する期間をテストする演算子。

    この関数は、2つの期間(エンドポイントによって定義される)が重なる場合はtrueを返し、重ならない場合はfalseを返します。

    構文

    次の2つの方法で使用できます。

    (start1, end1) OVERLAPS (start2, end2)
    (start1, length1) OVERLAPS (start2, length2)

    つまり、開始日時を指定すると、終了日時または時間の長さを指定するオプションがあります。

    より具体的には、エンドポイントは、日付、時刻、またはタイムスタンプのペアとして指定できます。または、日付、時刻、またはタイムスタンプの後に間隔を指定します。

    値のペアが指定されている場合、開始または終了のいずれかを最初に書き込むことができます。 OVERLAPS ペアの以前の値を自動的に開始します。

    これがデモンストレーションの基本的な例です。

    SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
           (date '2022-02-09', date '2022-03-10');

    結果:

    True

    両方の期間が重複しているため、結果は真です。

    ここでも同じですが、今回は期間が重ならないように変更します。

    SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
           (date '2022-02-09', date '2022-03-08');

    結果:

    False

    一般的なエンドポイント

    各期間は、ハーフオープン間隔 startを表すと見なされることに注意してください。 <= 時間 < end start でない限り、 およびend 等しい場合、それはその単一の瞬間を表します。これは、エンドポイントのみが共通している2つの期間が重複しないことを意味します。

    次の例では、2番目の期間は最初の期間が終了するのと同じ日に開始します。

    SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
           (date '2022-02-10', date '2022-03-10');

    結果:

    False

    ただし、最初の期間の両方のエンドポイントが同じである場合は、異なる結果が得られます。

    SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
           (date '2022-01-09', date '2022-02-10');

    結果:

    True

    間隔

    前述のように、2番目のエンドポイントは間隔にすることができます。

    SELECT (date '2022-01-09', interval '32 days') OVERLAPS
           (date '2022-02-09', date '2022-03-10');

    結果:

    True

    1. 変数を宣言して同じOracleSQLスクリプトで使用するにはどうすればよいですか?

    2. Ubuntuサーバー17.04php7およびapache2でoci8.soをロード中にエラーが発生しました

    3. SQLServerの切り捨てと8192の制限

    4. VARCHARフィールドでの文字列の出現回数をカウントしますか?