LoginSignup
1
0

More than 5 years have passed since last update.

Db2:日付操作で任意の日を加える(ADD_DAYS,ADD_MONTHS 他)

Posted at

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 レコードが選択されました。

参考資料

1
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
1
0