2014-01-14 107 views
0

我将所有日期都存储在UTC日期的SQL Server日期时间字段中。 有一个要求,我必须从UTC日期字段的过程中计算本地日期时间,并为此我有本地日期时间的时区偏移量。SQl服务器时区偏移量计算

例如,我的时区偏移量是:'05:30:00'

和UTC日期是:2013年2月9日08:34:12.037

希望的输出:2013年2月9日14:04:12.037

现在有一个简单的方法可以在没有使用DateAdd的情况下完成此任务,并以小时和分钟分割偏移量。

+0

供参考:https://www.mssqltips.com/sqlservertip/4466/sql-server-2016-:作为SQL 2016的存在通过'在时间zone'表达是为时区支持new-date-objects/ – JohnLBevan

回答

1

您应该可以使用SWITCHOFFSET函数。下面是一个例子:

declare @dt datetime; 

set @dt = '2013-02-09 08:34:12.037'; 

select SWITCHOFFSET(CONVERT(datetimeoffset, @dt), '+05:30') as 'DATETIMEOFFSET', 
     CAST(SWITCHOFFSET(CONVERT(datetimeoffset, @dt), '+05:30') as datetime) as 'DATETIME' 

-- Outputs: 
-- 
-- 2013-02-09 14:04:12.0370000 +05:30  2013-02-09 14:04:12.037 
+0

感谢它的完美。 – user2561997

0

使用转换与112:

declare @d datetime 
set @d = getdate() 
declare @s nvarchar(20) 
set @s = convert(varchar, @d, 112) 
print @s 

该字符串将有一年,一个月,秒等。始终在同一位置

提取与子所需的部分:

print substring(@s, 1, 4) -- the year 

现在通过将小时数乘以60并添加分钟数,重新计算整个事物的分钟数。现在从这个数字减去你的分钟增量。用调整后的日期时间构建一个新字符串,并将其转换回日期时间。但是......如果你还需要知道日期,并且你想正确地做... ....还有一些编码。

我的建议:使用dateadd它简单而正确(减去分钟是我的建议)。