AS400(System i)のDb2で日付を扱うときのまとめです。
今現在の日付を単純に出力する
今現在の日付を出力するときは、
CURRENT DATEという特殊レジスターを使います。
SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1
出力結果は次の通りです。
CURRENT DATE 21/12/13
また、タイムスタンプを出力するときは同じように CURRENT TIMESTAMPを使います。
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1
出力結果
CURRENT TIMESTAMP 2021-12-13-10.15.10.845724
タイムスタンプの精度を指定する
タイムスタンプの精度を指定したいときは、
CURRENT TIMESTAMP(精度)
0~12までの精度指定することできます。
数字が小さいほうが荒く、
数字が大きいほうが細かい精度になります。
デフォルトの精度は6になります。
SELECT CURRENT TIMESTAMP(0) MIN, CURRENT TIMESTAMP DEFAULT, CURRENT TIMESTAMP(12) MAX FROM SYSIBM.SYSDUMMY1
MIN DEFAULT MAX 2021-12-13-17.28.48 2021-12-13-17.28.48.438198 2021-12-13-17.28.48.438198303710
文字列から日付を取得する
文字列を日付に変換して取得することも簡単にできます。
DATE関数
DATE関数を使うことで文字列をDATE型の日付に変換することができます。
SELECT DATE('2021-12-13') FROM SYSIBM.SYSDUMMY1
DATE 21/12/13
DATE関数で変換できる日付の文字列表現は下記を参照ください。
日付/時刻の値 - IBM DB2 9.7 for Linux, UNIX, and Windows
TO_DATE関数
TO_DATE関数を使うと、
DATE関数よりも柔軟に文字列を日付に変換できます。
ただ戻り値はタイムスタンプ型なので、
単純な日付に変換するときは
上述のDATE関数をかませる必要があります。
SELECT DATE(TO_DATE('20211213','YYYYMMDD')) FROM SYSIBM.SYSDUMMY1
DATE 21/12/13
TO_DATE関数で使用可能な文字列表現は下記をご参照ください。
TIMESTAMP_FORMAT - IBM DB2 9.7 for Linux, UNIX, and Windows
日付の加減
日付の加減も簡単にできます。
1か月後
SELECT CURRENT TIMESTAMP + 1 MONTHS FROM SYSIBM.SYSDUMMY1
1年後
SELECT CURRENT TIMESTAMP + 1 YEARS FROM SYSIBM.SYSDUMMY1
1週間前
SELECT CURRENT DATE -7 DAYS FROM SYSIBM.SYSDUMMY1
日付をYYYYMMDD形式に変換する
よく使われるであろう(?)
YYYYMMDD形式の文字列を作るときは
TO_CHAR関数を使います。
SELECT TO_CHAR(CURRENT DATE, 'YYYYMMDD') FROM SYSIBM.SYSDUMMY1
TO_CHAR 20211213
月初、月末の取得
月初
月初の日付を求めたいときは、Db2のバージョン11.1以降であれば
FIRST_DAY関数が使えます。
SELECT FIRST_DAY(CURRENT DATE) FROM SYSIBM.SYSDUMMY1
FIRST_DAY 21/12/01
バージョンが古くてFIRST_DAY関数を使えないときは
力づくで求めましょう。
SELECT DATE(YEAR(CURRENT DATE)||'-'||MONTH(CURRENT DATE)||'-'||1) FROM SYSIBM.SYSDUMMY1
DATE 21/12/01
月末
月末はLAST_DAY関数が使えます。
こちらは最古のバージョンは確認できませんでしたが、
FIRST_DAY関数よりは昔からあるようです。
SELECT LAST_DAY(CURRENT DATE) FROM SYSIBM.SYSDUMMY1
DATE 21/12/31
終わりに
Db2における日付の扱い方についてのまとめでした。
データベース操作において日付操作は頻出なので、
他のRDBMSと遜色なく日付操作を行えるDb2に圧倒的感謝・・・!
というわけで、ここまでお読み頂きありがとうございました。
参考
日付/時刻の値 - IBM DB2 9.7 for Linux, UNIX, and Windows