現在日時を取得する関数は、日時系のデータ型に応じたものが存在する。
関数が返すデータ型 | 現在日時取得関数 | 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_date
はlocaltimestamp
の日付部分を返すので、関数名は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に指定することも出来る。
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)