[SQL SERVER][Memo]全时区转换

时间:2021-08-10 03:10:42

[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)"


[SQL SERVER][Memo]全时区转换

如果使用SQL2005早期版本可参考 SQL 2005 Time Zone Conversion Functions 




--取得Taipei时区位移
select DATEDIFF(MI, SYSDATETIMEOFFSET(),getdate()) as ‘TimeZoneOffset‘

[SQL SERVER][Memo]全时区转换

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 )‘


[SQL SERVER][Memo]全时区转换

参考

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]全时区转换