Db2 11.1には、日付操作を行う関数についても多くの拡張があり、日付・時刻操作をSQLでより簡単に行えるようになっています。
日付・時刻操作に関して、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)
任意の日を加える関数
次の関数は、CURRENT TIMESTAMPから任意の日を加えたり減じたりします。
ADD_YEARS - 年を足す
ADD_MONTHS - 月を足す
ADD_DAYS - 日を足す
ADD_HOURS - 時間数を足す
ADD_MINUTES - 分数を足す
ADD_SECONDS - 秒数を足す
関数のフォーマットは次にようになります。
ADD_DAYS ( expression, numeric-expression)
任意の年、日、時などを加える
以下のSQLは、それぞれ、current dateに1単位を足します。
date_add1.sqlというテキストファイルにSQLを書いて保管します。
(date_add1.sql)
WITH DATES(FUNCTION, RESULT) AS
(
VALUES
('CURRENT DATE ',NOW),
('ADD_YEARS ',ADD_YEARS(NOW,1)),
('ADD_MONTHS ',ADD_MONTHS(NOW,1)),
('ADD_DAYS ',ADD_DAYS(NOW,1)),
('ADD_HOURS ',ADD_HOURS(NOW,1)),
('ADD_MINUTES ',ADD_MINUTES(NOW,1)),
('ADD_SECONDS ',ADD_SECONDS(NOW,1))
)
SELECT * FROM DATES;
Db2のSAMPLEデータベースに接続して、次のSQLを実行します。
db2 -tvf date_add1.sql
本日9月14日であるため、以下の結果が戻ります。
FUNCTION RESULT
--------------- --------------------------
CURRENT DATE 2018-09-14-13.06.25.921000
ADD_YEARS 2019-09-14-13.06.25.921000
ADD_MONTHS 2018-10-14-13.06.25.921000
ADD_DAYS 2018-09-15-13.06.25.921000
ADD_HOURS 2018-09-14-14.06.25.921000
ADD_MINUTES 2018-09-14-13.07.25.921000
ADD_SECONDS 2018-09-14-13.06.26.921000
7 レコードが選択されました。
任意の年、日、時などを引く
負の数値を使うことで、減算することができます。
date_add2.sqlというテキストファイルにSQLを書いて保管します。
(date_add2.sql)
WITH DATES(FUNCTION, RESULT) AS
(
VALUES
('CURRENT DATE ',NOW),
('ADD_YEARS ',ADD_YEARS(NOW,-1)),
('ADD_MONTHS ',ADD_MONTHS(NOW,-1)),
('ADD_DAYS ',ADD_DAYS(NOW,-1)),
('ADD_HOURS ',ADD_HOURS(NOW,-1)),
('ADD_MINUTES ',ADD_MINUTES(NOW,-1)),
('ADD_SECONDS ',ADD_SECONDS(NOW,-1))
)
SELECT * FROM DATES;
Db2のSAMPLEデータベースに接続して、次のSQLを実行します。
db2 -tvf date_add2.sql
本日9月14日であるため、以下の結果が戻ります。
FUNCTION RESULT
--------------- --------------------------
CURRENT DATE 2018-09-14-13.08.22.574000
ADD_YEARS 2017-09-14-13.08.22.574000
ADD_MONTHS 2018-08-14-13.08.22.574000
ADD_DAYS 2018-09-13-13.08.22.574000
ADD_HOURS 2018-09-14-12.08.22.574000
ADD_MINUTES 2018-09-14-13.07.22.574000
ADD_SECONDS 2018-09-14-13.08.21.574000
7 レコードが選択されました。
#参考資料