Oracle:由TZNAME检索是否可能?

时间:2011-10-18 21:51:34

标签: database oracle timezone

我们如何找出数据库中的TZNAME? 和TZNAME我的意思是(从列表中)

select * from V$TIMEZONE_NAMES;

如果我们做了

select dbtimezone from dual

我得到dbtimezone = -04:00

我们检索DBTIMEZONE,它是时区的数字表示,但由于它们中有很多但在不同的地方,我们将无法100%准确。例如,目前我们有-04:00,可以是EST CANADA和EST NY(或者不涉及日光节约的日期)

有没有办法检索数据库时区的实际TZNAME而不是实际时间?

谢谢

1 个答案:

答案 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