LoginSignup
0
0

More than 5 years have passed since last update.

Db2: 2つの期間が重なり合っているかどうかを判別するOVERLAPS述部

Posted at

Db2 11.1の新機能から、日付がらみの新しい関数や新機能の紹介を続けます。

Db2 11.1では、日付・時刻操作に関して、Oracle, Netteza, PostgreSQL, MySQLなど、他のデータベース製品で使用されるSQLも簡単にDb2環境で実行できるよう、SQLの互換性がより強化されています。

参考(前回までの日付がらみの新しい組込み関数に関する記事)
Db2:日付,時刻の操作を行う関数(NOW,EXTRACT)
Db2:日付,時刻の操作を行う関数(DATE_PART)
Db2:日付,時刻の操作を行う関数(DATE_TRUNC)
Db2:その月から特定の日を取り出す関数(DAYOFMONTH,FIRST_DAY,DAYS_TO_END_OF_MONTH)
Db2:日付操作で任意の日を加える(ADD_DAYS,ADD_MONTHS 他)
Db2:日付から異なる値を戻す関数(THIS_WEEK,THIS_MONTH,NEXT_WEEK,NEXT_MONTH 他)

OVERLAPS 述語

OVERLAPS述部は、2つの期間が重なり合っているかどうかを判別するために使用します。
これは、Db2内部の関数というよりも、特別なSQLシンタックスの拡張として使えるようになっています。

時系列の期間は、日時式のペアによって指定されます。
最初の式は期間の開始を指定し、2 番目はその終了を指定します。

開始値と終了値は、期間に含まれません。
例えば、期間 2018-10-19 から 2018-10-20 と 2018-10-20 から 2018-10-21 は重なり合いません。

Db2のSAMPLEデータベースに接続して、実行してみましょう。

例えば、以下の例はオーバーラップしません。

VALUES
  CASE
    WHEN 
      (NOW, NOW + 1 DAY) OVERLAPS (NOW + 1 DAY, NOW + 2 DAYS) THEN 'Overlaps'
    ELSE
      'No Overlap'
  END;
1
----------
No Overlap

  1 レコードが選択されました。

しかし、最初の日付の範囲が一日延びると、以下の例のようにオーバーラップすることになります。

VALUES
  CASE
    WHEN 
      (NOW, NOW + 2 DAYS) OVERLAPS (NOW + 1 DAY, NOW + 2 DAYS) THEN 'Overlaps'
    ELSE
      'No Overlap'
  END;

1
----------
Overlaps

  1 レコードが選択されました。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0