タイムゾーンについては、次のことができます。
SHOW timezone;
または同等のもの:
SELECT current_setting('TIMEZONE');
ただし、これはサーバーが受け入れる任意の形式にすることができるため、UTC
を返す場合があります。 、08:00
、Australia/Victoria
、または同様のもの。
苛立たしいことに、クライアントが使用しているUTCからの時間オフセットを時間と分で報告する組み込み関数がないように見えます。これは私にはちょっと狂気のようです。 UTCの現在の時刻をローカルの現在の時刻と比較することで、オフセットを取得できます。
SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`
...しかしIMOは、current_timestamp
から秒単位でtzオフセットを抽出する方がクリーンです。 間隔に変換します:
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;
timezone_hour
のGlennへのクレジット およびtimezone_minute
以前に使用したハックの代わりに、extract(timezone from current_timestamp) * INTERVAL '1' second)
とCTE。
先行ゼロが必要ない場合は、代わりに次を使用できます:
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;
参照: