的時區,您可以:
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
和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;
參見:
多麼令人難以置信的回覆。非常感謝您的專業知識。 – xingyu