タイムゾーンについては、次のことができます。
SHOW timezone;
または同等のもの:
SELECT current_setting('TIMEZONE');
ただし、これはサーバーが受け入れる任意の形式にすることができるため、、、、などを返す場合がありUTC
ます。08:00
Australia/Victoria
苛立たしいことに、クライアントが使用しているUTCからの時間オフセットを時間と分で報告する組み込み関数がないように見えます。これは私にはちょっとばかげているようです。UTCの現在の時刻をローカルの現在の時刻と比較することにより、オフセットを取得できます。
SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`
...しかし、IMOは、からtzオフセットを秒単位で抽出current_timestamp
し、間隔に変換する方がクリーンです。
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
これは、先行ゼロを生成しないことを除いて、目的の結果と一致します。したがって、-05:00
は-5:00
。厄介なことに、先行ゼロを何時間も生成することは不可能であるように思われto_char
、次の醜い手動フォーマットが残ります。
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone_hour FROM current_timestamp),'FM00')||':'||
to_char(extract(timezone_minute FROM current_timestamp),'FM00');
$$ LANGUAGE 'SQL' STABLE;
以前に使用したハックとCTEの代わりにtimezone_hour
、Glennの功績によるものです。timezone_minute
extract(timezone from current_timestamp) * INTERVAL '1' second)
先頭のゼロが必要ない場合は、代わりに次を使用できます。
CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
$$ LANGUAGE 'SQL' STABLE;
参照: