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)
日付から異なる値を戻す関数
以下の4つの関数は、日付からそれぞれ異なる値を戻します。
THIS_WEEK - 指定した日付の週の最初の日を戻す
THIS_MONTH - 指定した日付の月の初日を戻す
THIS_QUARTER - 指定した日付の四半期の最初の日を戻す
THIS_YEAR - 指定した日付の年の最初の日を戻す
Db2のSAMPLEデータベースに接続して、実行してみましょう。
this_week.sqlというテキストファイルにSQLを書いて保管します。
(this_week.sql)
WITH DATES(FUNCTION, RESULT) AS
(
VALUES
('CURRENT DATE ',NOW),
('THIS_WEEK ',THIS_WEEK(NOW)),
('THIS_MONTH ',THIS_MONTH(NOW)),
('THIS_QUARTER ',THIS_QUARTER(NOW)),
('THIS_YEAR ',THIS_YEAR(NOW))
)
SELECT * FROM DATES;
Db2のSAMPLEデータベースに接続して、このSQLを実行します。
db2 -tvf this_week.sql
本日9月21日であるため、以下の結果が戻ります。
FUNCTION RESULT
--------------- --------------------------
CURRENT DATE 2018-09-21-10.28.26.600000
THIS_WEEK 2018-09-16-00.00.00.000000
THIS_MONTH 2018-09-01-00.00.00.000000
THIS_QUARTER 2018-07-01-00.00.00.000000
THIS_YEAR 2018-01-01-00.00.00.000000
5 レコードが選択されました。
それぞれNEXT関数もあり
この4つには、はそれぞれに応じたNEXT関数もあります。
NEXT関数は、次の週・月・四半期・年を戻します。
NEXT_WEEK - 指定した日付の翌週の最初の日を戻す
NEXT_MONTH - 指定した日付の翌月の初日を戻す
NEXT_QUARTER - 指定した日付の次の四半期の最初の日を戻す
NEXT_YEAR - 指定した日付の翌年の最初の日を戻す
Db2のSAMPLEデータベースに接続して、実行してみましょう。
next_week.sqlというテキストファイルにSQLを書いて保管します。
(next_week.sql)
WITH DATES(FUNCTION, RESULT) AS
(
VALUES
('CURRENT DATE ',NOW),
('NEXT_WEEK ',NEXT_WEEK(NOW)),
('NEXT_MONTH ',NEXT_MONTH(NOW)),
('NEXT_QUARTER ',NEXT_QUARTER(NOW)),
('NEXT_YEAR ',NEXT_YEAR(NOW))
)
SELECT * FROM DATES;
Db2のSAMPLEデータベースに接続して、このSQLを実行します。
db2 -tvf next_week.sql
本日9月21日であるため、以下の結果が戻ります。
FUNCTION RESULT
--------------- --------------------------
CURRENT DATE 2018-09-21-10.39.27.586000
NEXT_WEEK 2018-09-23-00.00.00.000000
NEXT_MONTH 2018-10-01-00.00.00.000000
NEXT_QUARTER 2018-10-01-00.00.00.000000
NEXT_YEAR 2019-01-01-00.00.00.000000
5 レコードが選択されました。