我将所有日期都存储在UTC日期的SQL Server日期时间字段中。 有一个要求,我必须从UTC日期字段的过程中计算本地日期时间,并为此我有本地日期时间的时区偏移量。SQl服务器时区偏移量计算
例如,我的时区偏移量是:'05:30:00'
和UTC日期是:2013年2月9日08:34:12.037
希望的输出:2013年2月9日14:04:12.037
现在有一个简单的方法可以在没有使用DateAdd的情况下完成此任务,并以小时和分钟分割偏移量。
我将所有日期都存储在UTC日期的SQL Server日期时间字段中。 有一个要求,我必须从UTC日期字段的过程中计算本地日期时间,并为此我有本地日期时间的时区偏移量。SQl服务器时区偏移量计算
例如,我的时区偏移量是:'05:30:00'
和UTC日期是:2013年2月9日08:34:12.037
希望的输出:2013年2月9日14:04:12.037
现在有一个简单的方法可以在没有使用DateAdd的情况下完成此任务,并以小时和分钟分割偏移量。
您应该可以使用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
感谢它的完美。 – user2561997
使用转换与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它简单而正确(减去分钟是我的建议)。
供参考:https://www.mssqltips.com/sqlservertip/4466/sql-server-2016-:作为SQL 2016的存在通过'在时间zone'表达是为时区支持new-date-objects/ – JohnLBevan