extract関数は、日時系のデータ型から要素(年・月・日・時・分・秒)の値を抽出する関数。
Tsurugi 1.12.0以降。
extract(要素名 from 値)
| 要素名 | 型 | 説明 | 備考 |
|---|---|---|---|
YEAR |
INT |
年 | |
MONTH |
INT |
月 | |
DAY |
INT |
日 | |
HOUR |
INT |
時 | |
MINUTE |
INT |
分 | |
SECOND |
DECIMAL(*, *) |
秒 | SECOND(9)と同じっぽい |
SECOND(n) |
DECIMAL(*, *) |
秒 | 小数点以下の桁数を指定する |
TIMEZONE_HOUR |
INT |
ゾーンオフセット(時) | |
TIMEZONE_MINUTE |
INT |
ゾーンオフセット(分) | |
DATE |
DATE |
年月日 | YEAR TO DAYと同じ |
YEAR TO MONTH |
DATE |
年月 | その月の1日の日付が返る |
YEAR TO DAY |
DATE |
年月日 | |
YEAR TO HOUR |
元の値と同じ |
年月日時 | 0分0秒の日時が返る |
YEAR TO MINUTE |
元の値と同じ |
年月日時分 | 0秒の日時が返る |
YEAR TO SECOND |
元の値と同じ |
年月日時分秒 |
TIMESTAMP WITH TIME ZONEの値に対してextract関数を使用した場合、 システム(Tsurugi)のタイムゾーンに変換された値が返る。
(DockerのTsurugiの場合、)デフォルトでは、UTCに変換された日付が返る。
(TIMEZONE_HOURやTIMEZONE_MINUTEは常に0が返る)
tgsql> select extract(date from timestamp with time zone '2026-07-01 01:34:56.789+09:00'); [@#0: DATE] [2026-06-30] tgsql> select extract(month from timestamp with time zone '2026-07-01 01:34:56.789+09:00'); [@#0: INT] [6] tgsql> select extract(day from timestamp with time zone '2026-07-01 01:34:56.789+09:00'); [@#0: INT] [30]
Tsurugiのタイムゾーンは、tsurugi.iniの[session]のzone_offsetで設定できる。
[session]
zone_offset=+09:30
tgsql> select extract(timezone_hour from timestamp with time zone '2026-07-01'); [@#0: INT] [9] tgsql> select extract(timezone_minute from timestamp with time zone '2026-07-01'); [@#0: INT] [30]
要するに、通常取得される値に対して、その要素が取れるということだろう。
tgsql> select timestamp with time zone '2026-07-01 12:34:56.789+09:00'; [@#0: TIMESTAMP WITH TIME ZONE] [2026-07-01 13:04:56.789000000+09:30] 年 月 日 時 分 秒 zh zm