我们如何找出数据库中的TZNAME? 和TZNAME我的意思是(从列表中)
select * from V$TIMEZONE_NAMES;
如果我们做了
select dbtimezone from dual
我得到dbtimezone = -04:00
我们检索DBTIMEZONE,它是时区的数字表示,但由于它们中有很多但在不同的地方,我们将无法100%准确。例如,目前我们有-04:00,可以是EST CANADA和EST NY(或者不涉及日光节约的日期)
有没有办法检索数据库时区的实际TZNAME而不是实际时间?
谢谢
答案 0 :(得分:2)
我们可以从时间戳中提取TIMEZONE_REGION,为其提供TIMESTAMP WITH TIMEZONE。像这样:
SQL> select extract(timezone_region from current_timestamp)
2 from dual
3 /
EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
CET
SQL> alter session set time_zone='UTC';
Session altered.
SQL> select extract(timezone_region from current_timestamp)
2 from dual
3 /
EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
UTC
SQL> alter session set time_zone='-04:00';
Session altered.
SQL> select extract(timezone_region from current_timestamp)
2 from dual
3 /
EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
UNKNOWN
SQL>
最后一个结果返回UNKNOWN,因为多个时区名称映射到减去四小时的偏移量。有多种方法可以在会话级别设置时区名称;其中一个可能是解决这个问题的最佳方法。 Find out more