[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","SystemCurrentControlSetControlTimeZoneInformation","StandardName",@GMTname OUTPUT
EXEC xp_regread "HKEY_LOCAL_MACHINE","SystemCurrentControlSetControlTimeZoneInformation","DaylightName",@DSTname OUTPUT
SELECT @GMTname as ‘格林威治标准时间(GMT: Greenwich Mean Time )‘,@DSTname as ‘夏令时间(DST: Daylight Saving Time )‘
参考
GETDATE (Transact-SQL)
datetimeoffset (Transact-SQL)
SWITCHOFFSET (Transact-SQL)
[SQL SERVER][TSQL]日期和时间函数
Using time zone data in SQL Server 2008
SQL 2005 Time Zone Conversion Functions
time zone conversion function (SQL 2008)
http://time.artjoey.com/
时区列表
原文:大专栏 [SQL SERVER][Memo]全时区转换