2014-01-14 48 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它簡單而正確(減去分鐘是我的建議)。