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

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SQL SERVER][Memo]全时区转换相关的知识,希望对你有一定的参考价值。

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


以上是关于[SQL SERVER][Memo]全时区转换的主要内容,如果未能解决你的问题,请参考以下文章

转换为我的时区 - SQL Server

如何将包含时区的字符串转换为日期时间 sql server

来自带有时区的 SQL Server 的 DateTime

TSQL:如何将本地时间转换为 UTC? (SQL Server 2008)

在哪里可以获得用于 SQL Server 的简单时区表? [关闭]

如何找到 SQL Server 数据库的时区? [关闭]