2011-10-18 29 views
0

我們如何才能知道我們的數據庫中有哪些TZNAME? 和TZNAME我的意思是這樣(從列表中)Oracle:通過TZNAME檢索可能嗎?

select * from V$TIMEZONE_NAMES; 

如果我們做一個

select dbtimezone from dual 

我得到DBTIMEZONE = -04:00

我們檢索DBTIMEZONE這是時區的數字表示,但由於其中有很多但在不同的地方,我們將無法100%準確。例如,目前我們有-04:00,可以是EST CANADA和EST NY(或不涉及日光節約的日期)

有什麼辦法可以檢索數據庫時區的實際TZNAME而不是實際時間?

謝謝

回答

1

我們可以從時間戳提取TIMEZONE_REGION,提供了與包含時區的時間戳。像這樣:

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

+0

我明白了,但由於實際時間戳正在返回-04:00,所以返回未知數。謝謝您的幫助!! – Kevin

+0

基於模糊性,這是否意味着當時區更改時-04:00永遠不會改變? – Kevin

相關問題