我有一个DateTime varchar,格式为:2005-08-08T00:00:00 + 01:00。如何将DateTime字符串转换为SQL Server中的DateTime
- 此格式是否有名称? (它不是ISO8601,它是RFC3339吗?)
- 如何使用Transact-Sql将其转换为DateTime?
编辑 以下是简要的答案,从别人输入拼凑起来:
- 这是 ISO8601与UTC的时差。如果是UTC,它将以'Z'而不是'+01:00'结束。 wikipedia
可以按如下方式将其转换为本地时间或UTC:
DECLARE @d VARCHAR(25)SET @d = '2007-08-08T00:01:00 + 01:00' SET @d = '2007-08-08T00:01:00-01:00'SET @d ='2007-08-08T00:01:00 + 05:30'
SELECT @d as Input,CONVERT (DATETIME,LEFT(@d,19),126)AS LocalDate ,DATEADD(MINUTE,-CAST((SUBSTRING(@d,20,1)+ RIGHT(@d,2))INT INT),DATEADD HOUR ,-CAST(SUBSTRING(@d,20,3)AS INT) ,CONVERT(DAT ETIME,LEFT(@d,19),126)))作为UtcDate WHERE @d LIKE '_ - - _T__:: [+ - ] :'
结果:
Input LocalDate UtcDate
------------------------- ----------------------- -----------------------
2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000
2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000
2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000
请查看此页面 - > http://www.sqlusa.com/bestpractices/datetimeconversion/ – rt2800 2012-04-24 15:07:34
是的,我发现该网页使用谷歌。虽然在那里找不到我的格式。 – Colin 2012-04-24 15:32:29
值得注意的一件事是,您的SUBSTRING()语句会删除时区的分钟组件,这意味着它在相对于UTC不是整个小时的时区中会不正确。例如印度是UTC + 5:30。 – Rory 2012-08-22 09:29:50