Db2 11.1には、日付操作を行う関数についても多くの拡張があり、日付・時刻操作をSQLでより簡単に行えるようになっています。
日付・時刻操作に関して、Oracle, Netteza, PostgreSQL, MySQLなど、他のデータベース製品で使用されるSQLも簡単にDb2環境で実行できるよう、SQLの互換性がより強化されています。
参考(前回までの記事)
Db2:日付,時刻の操作を行う関数(NOW,EXTRACT)
Db2:日付,時刻の操作を行う関数(DATE_PART)
DATE_TRUNC関数
DATE_TRUNCは、前回紹介したDATE_PART関数と同様の抽出をした後、日付、時刻、タイム・スタンプの値を指定された時間単位に切り捨てます。
DATE_TRUNC ( element, expression )
DATE_TRUNCでは、elementはEXTRACT関数と違い、クオーテーションマークで囲む必要があります。
DATE_TRUNC関数の、結果のデータ・タイプは常にBIGINT です。
element | 説明 |
---|---|
MILLENNIUM(S) | 千年紀の最初の日 |
CENTURY(CENTURIES) | 世紀の最初の日 |
DECADE(S) | 10 年単位の最初の日 |
YEEAR(S) | 年部分 |
QUARTER | 四半期の最初の日 |
MONTHE | 月の最初の日 |
WEEK | 週の最初の日 |
DAY(S) | 日の初め |
HOUR(S) | 時間の初め |
MINUTE(S) | 分の初め |
SECOND(S) | 秒の初め |
MILLISECOND(S) | ミリ秒の初め |
MICROSECOND(S) | マイクロ秒の初め |
NOW関数は、SQLステートメントが現行サーバーで実行された時の読み取り値に基づくタイム・スタンプを戻しまVす。
NOW関数によって戻される値は、CURRENT TIMESTAMP特殊レジスターによって戻される値と同じです。
つまり、NOWはCURRENT TIMESTAMPのシノニムです。
Db2のSAMPLEデータベースに接続して、次のSQLを実行します。
VALUES NOW
1
--------------------------
2018-08-31-17.44.31.248000
1 レコードが選択されました。
DATE_FUNCとNOWを使ってSQLを実行してみる
Db2 11.1のSAMPLEデータベースに接続し、DATE_TRUNCとNOWを使って、日付や時刻値を抽出するSQLを実行します。
長いので、date_func3.sqlというテキストファイルにSQLを書いて保管します。
(date_func3.sql)
WITH DATES(FUNCTION, RESULT) AS (
VALUES
('MILLENNIUM(S)', DATE_TRUNC('MILLENNIUM' ,NOW )),
('CENTURY(CENTURIES)', DATE_TRUNC('CENTURY' ,NOW )),
('DECADE(S)', DATE_TRUNC('DECADE' ,NOW )),
('YEAR(S)', DATE_TRUNC('YEAR' ,NOW )),
('QUARTER', DATE_TRUNC('QUARTER' ,NOW )),
('MONTH', DATE_TRUNC('MONTH' ,NOW )),
('WEEK', DATE_TRUNC('WEEK' ,NOW )),
('DAY(S)', DATE_TRUNC('DAY' ,NOW )),
('HOUR(S)', DATE_TRUNC('HOURS' ,NOW )),
('MINUTE(S)', DATE_TRUNC('MINUTES' ,NOW )),
('SECOND(S)', DATE_TRUNC('SECONDS' ,NOW )),
('MILLISECOND(S)', DATE_TRUNC('MILLISECONDS' ,NOW ))
)
SELECT * FROM DATES;
db2 -tvf date_func3.sql
FUNCTION RESULT
------------------ --------------------------
MILLENNIUM(S) 2000-01-01-00.00.00.000000
CENTURY(CENTURIES) 2000-01-01-00.00.00.000000
DECADE(S) 2010-01-01-00.00.00.000000
YEAR(S) 2018-01-01-00.00.00.000000
QUARTER 2018-07-01-00.00.00.000000
MONTH 2018-08-01-00.00.00.000000
WEEK 2018-08-27-00.00.00.000000
DAY(S) 2018-08-31-00.00.00.000000
HOUR(S) 2018-08-31-17.00.00.000000
MINUTE(S) 2018-08-31-17.45.00.000000
SECOND(S) 2018-08-31-17.45.28.000000
MILLISECOND(S) 2018-08-31-17.45.28.990000
12 レコードが選択されました。
#参考資料
-
-
- 新しい組み込み集約関数およびスカラー関数
-