[SQL SERVER][Memo]全時區轉換
假設你的應用程式是跨國(如跨國銀行交易)使用的話,
那麼資料庫一些國際化特性支持可說相當重要,
其中最常見的就是各國時區上的差異。
由於SQL Server getdate() 是擷取執行個體電腦所返回的值,
所以並不包含資料庫時區位移,
但SQL2008後新增了 datetimeoffset 資料類型(結合時區為基礎的當日時間),
且可搭配 SWITCHOFFSET Function 來更方便處理時區轉換需求,
下面自己筆記一下(個人認為在AP端處理應該可以更方便 TimeZoneInfo Class)。
--時區轉換
SELECT SYSDATETIMEOFFSET() as "Taipei (GMT +8:00)",
SWITCHOFFSET(SYSDATETIMEOFFSET(), '+09:00') as "Janpen (GMT +9:00)",
SWITCHOFFSET(SYSDATETIMEOFFSET(), '-10:00') as "Hawaii (GMT -10:00)"
如果使用SQL2005早期版本可參考 SQL 2005 Time Zone Conversion Functions
--取得Taipei時區位移
select DATEDIFF(MI, SYSDATETIMEOFFSET(),getdate()) as 'TimeZoneOffset'
480 min /60 min=8 hr
--讀取作業系統登錄檔取得GMT和DST名稱
DECLARE @GMTname VARCHAR(100),@DSTname VARCHAR(100);
EXEC xp_regread "HKEY_LOCAL_MACHINE","System\CurrentControlSet\Control\TimeZoneInformation","StandardName",@GMTname OUTPUT
EXEC xp_regread "HKEY_LOCAL_MACHINE","System\CurrentControlSet\Control\TimeZoneInformation","DaylightName",@DSTname OUTPUT
SELECT @GMTname as '格林威治標準時間(GMT: Greenwich Mean Time )',@DSTname as '夏令時間(DST: Daylight Saving Time )'
參考
Using time zone data in SQL Server 2008
SQL 2005 Time Zone Conversion Functions