S-JIS[2024-08-16] 変更履歴

Tsurugi SQL 現在日時取得関数

TsurugiSQL関数の現在日時取得のメモ。


概要

現在日時を取得する関数は、日時系のデータ型に応じたものが存在する。

関数が返すデータ型 現在日時取得関数 ver 備考
date current_date 1.0.0-BETA6 localtimestampの日付部分と等しい。
time localtime 1.0.0-BETA6 localtimestampの時刻部分と等しい。
timestamp localtimestamp 1.0.0-BETA6 current_timestampの日付時刻部分(タイムゾーンオフセットを除去したもの)と等しい。
time with time zone      
timestamp with time zone current_timestamp 1.0.0-BETA6 タイムゾーンオフセット付き現在日時。

current_datelocaltimestampの日付部分を返すので、関数名はlocaldateの方が分かりやすいと思うのだが、ANSI SQLでこういう関数名になっているらしい…。
あと、currentとtimestampの間にアンダースコア「_」を入れるなら、localとtimestampの間にも入れてほしいが、きっと歴史的事情なんだろうなぁ…。

なお、「現在日時」というものは必ずタイムゾーンを伴っており、Tsurugiの場合はクライアントへ返す際のタイムゾーンオフセットはセッションで設定されているため(同一セッション内では同一なので)、「タイムゾーンオフセットのあるcurrent_timestamp」と「タイムゾーンオフセットを除去したlocaltimestamp」ではタイムゾーンオフセット部分以外は同一になる。


現在日時取得関数が返す値

現在日時取得関数は、同一トランザクション内では常に同じ日時を返す。(トランザクション開始時点の日時らしい)

tgsql> begin;

tgsql> select current_date, localtime from test;
[@#0: DATE, @#1: TIME_OF_DAY]
[2024-08-16, 17:41:55.505507007]
(1 row)

tgsql> select localtimestamp from test;
[@#0: TIME_POINT]
[2024-08-16 17:41:55.505507007]
(1 row)

tgsql> select current_timestamp from test;
[@#0: TIME_POINT_WITH_TIME_ZONE]
[2024-08-16 17:41:55.505507007+09:00]
(1 row)

tgsql> commit;

※この例では、tsurugi.iniのzone_offsetを+09:00にしてある。


create tableのdefaultの例

現在日時取得関数はcreate tableのdefaultに指定することも出来る。

tgsql> create table d (
     |   pk         int  primary key,
     |   local_date date default current_date
     | );
execute succeeded

tgsql> insert into d (pk) values(1);
(1 row inserted)

tgsql> select * from d;
[pk: INT4, local_date: DATE]
[1, 2024-08-16]
(1 row)

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