2010-08-31 39 views
0

在Oracle中,如何將「帶時區的時間戳」轉換爲服務器的當前時區?我需要動態確定服務器的當前時區是什麼。將「帶時區的時間戳記」列字段轉換爲服務器的當前時區

create table test_table1 
(rec1 timestamp with time zone) 

insert into test_table1(rec1) values (
to_timestamp_tz('1/1/1900 09:00:00 AM US/EASTERN','dd-mm-yyyy hh:mi:ss AM TZR') 
) 

SELECT NEW_TIME(rec1, TO_CHAR(rec1, 'TZR'), TO_CHAR(SYSTIMESTAMP, 'TZR')) 
FROM test_table1 

上面的示例創建一個帶有時區列的表。然後我在東部時區插入一行。 select語句不起作用。我試圖實現的是將rec_1列轉換爲服務器的時區並返回。

回答

0

你可以得到當前系統時區[以某種格式或其他]通過:

select to_char(systimestamp,'TZD | TZH TZM [ TZR ]'), DBTIMEZONE 
from dual; 

下可轉換幫助。不確定會話時區是否與數據庫時區相同。

SELECT rec1, SYS_EXTRACT_UTC(rec1), cast(rec1 as timestamp with local time zone) 
FROM test_table1 

當我使用systeimestamp我得到空

TZD可以返回空值(例如,它知道什麼偏移,但沒有得到它的「別名」) 。 TZR不應該。也許像...

SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', to_char(systimestamp,'TZR')) 
    FROM DUAL; 
+0

直接從表格中提取rec1列。當我使用查詢時:從test_table1中選擇to_char(rec1,'TZD')我得到'EST'/'CST',但是當我使用系統標記時,我得到空值。我想以'EST'格式獲取系統的當前時區,並使用new_date函數將其轉換爲東部。因此,如果它是東部同時將返回,如果不是,那麼它將被轉換。 – user305801 2010-09-01 16:18:16

+0

我讓DBA將dbtimezone設置爲正確的時區(-04:00)。現在我已經知道如何將此數據庫或數據庫當前日期/時間轉換爲東部時區。我也想考慮夏令時。雖然tz_offset是-04:00,但它確實是-05:00。 – user305801 2010-09-03 00:05:31

0

甲骨文將轉換基於標準的和夏令時的時區,如果區域「TZR」來代替小時和分鐘「TZH:TZM」偏移。

要符合您所在的地區可以使用(在11g中不知道其他版本的)

SELECT SYSTIMESTAMP AT TIME ZONE 'US/Eastern' FROM DUAL; 

使用必須存儲在數據庫中的區域,您可以通過

SELECT * FROM v$timezone_names WHERE tzname LIKE 'US%'; 

這個查詢檢查可以修改以識別任何區域。

Oracle全球化支持手冊也是一個很好的參考。

相關問題