S-JIS[2026-09-08/2026-09-09]

Tsurugi SQL extract関数

TsurugiSQL関数のextractのメモ。


概要

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
YEAR TO SECOND(n)
元の値と同じ 年月日時分秒  

TIMESTAMP WITH TIME ZONEの場合

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で設定できる。

$TSURUGI_HOME/var/etc/tsurugi.ini:

[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

Tsurugi SQL関数へ戻る / Tsurugi SQLへ戻る / Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま