我將所有日期都存儲在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