我用LEFT
得到的符号和小时数和LEFT
+ RIGHT
得到的符号和分钟数,然后用CAST
来改变varchar
值到int
值,并从那里它只是一个简单的DATEADD
几分钟和DATEADD
几个小时:
申报样品台
个
DECLARE @YourTable As Table
(
[Order Time] datetime,
Offset varchar(6)
)
填充试样台
INSERT INTO @YourTable VALUES
('2016-05-03 10:08:22', '+0200'),
('2016-05-03 10:08:22', '+0300'),
('2016-05-03 13:11:26', '-0200'), -- Note: - 2 hours
('2016-05-03 11:07:27', '+0200'),
('2016-05-03 14:22:35', '+0200'),
('2016-05-03 16:31:36', '-0325') -- Note: - 3 hours 25 minutes
选择
SELECT Offset, [Order Time],
DATEADD(HOUR,
-CAST(LEFT(Offset, LEN(Offset)-2) as int),
DATEADD(MINUTE,
-CAST(LEFT(Offset, 1) + RIGHT(Offset, 2) as int),
[Order Time])
) As [Order Time UTC]
FROM @YourTable
结果
Offset Order Time Order Time UTC
------ ----------------------- -----------------------
+0200 2016-05-03 10:08:22.000 2016-05-03 08:08:22.000
+0300 2016-05-03 10:08:22.000 2016-05-03 07:08:22.000
-0200 2016-05-03 13:11:26.000 2016-05-03 15:11:26.000 -- Note: - 2 hours
+0200 2016-05-03 11:07:27.000 2016-05-03 09:07:27.000
+0200 2016-05-03 14:22:35.000 2016-05-03 12:22:35.000
-0325 2016-05-03 16:31:36.000 2016-05-03 19:56:36.000 -- Note: - 3 hours and 25 minutes
为什么你被存储为+0200并没有为+02偏移:00? –
它来自一个文件加载到DB – JONSY
什么是列的数据类型? (我猜datetime和varchar) –