2014-10-30 52 views

回答

0

您需要本地和遠程時區,因此Oracle可以計算差值,例如

SELECT FROM_TZ(CAST(sysdate AS TIMESTAMP), 'America/New_York') 
AT TIME ZONE 'America/Los_Angeles' 
FROM DUAL; 

30.10.14 08:45:08,000000000 AMERICA/LOS_ANGELES 

SELECT FROM_TZ(CAST(sysdate AS TIMESTAMP), 'America/New_York') 
AT TIME ZONE 'America/Chicago' 
FROM DUAL; 

30.10.14 10:46:17,000000000 AMERICA/CHICAGO 

你可以得到時區名稱與此列表:

SELECT tzname, tzabbrev FROM V$TIMEZONE_NAMES; 

,所以你可以這樣做:

SELECT FROM_TZ(CAST(sysdate AS TIMESTAMP), 'America/New_York') 
AT TIME ZONE 'US/Central' 
FROM DUAL; 

假設你是在紐約。

+0

這樣寫是否正確 CURRENTTIMESTAMP AT TIME ZONE「US/Central」 – user3588496 2014-10-30 10:51:43

+0

@ user3588496在Oracle中有一個所有可能值的字典視圖:select * from v $ timezone_names;因爲我知道你可以使用cols – Multisync 2014-10-30 10:53:24

+1

我想寫在SQL不是oracle.can你建議我? – user3588496 2014-10-30 10:54:55

0

如果這適用於SQL Server 2008或更高版本,則這將提供特定時區偏移處的時間。我不知道你是否可以提供時區名稱,並且使用這種方法,你必須自己處理夏令時。在與SQL Server 2016添加

declare @dt datetimeoffset = switchoffset(convert(datetimeoffset, getutcdate()), '-06:00') 

select getutcdate() as utc, @dt as [datetimeoffset], cast(@dt as datetime) as [datetime] 
0

時區的支持,現在你可以這樣做:

SELECT SYSDATETIMEOFFSET() AT TIME ZONE 'Central Standard Time' 

注意標識Central Standard Time是中部時間在美國和加拿大的Windows時區ID。它包含了CST和CDT。