对于时区,您可以:
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;
归功于Glenn,
timezone_hour而
timezone_minute不是我以前使用过
extract(timezone fromcurrent_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;



