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 他)]
(https://qiita.com/camp07/items/9f1efda346f6b5556a8e)
[Db2:日付から異なる値を戻す関数(THIS_WEEK,THIS_MONTH,NEXT_WEEK,NEXT_MONTH 他)]
(https://qiita.com/camp07/items/8cc796d53bfbf2ab32c6)
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 レコードが選択されました。
#参考資料
-
-
SQL の互換性の機能拡張
- 新しい組み込み集約関数およびスカラー関数
- OVERLAPS 述語
-
SQL の互換性の機能拡張