我有一个 DateTime varchar,格式如下:2005-08-08T00:00:00+01:00。
- 这种格式有名字吗?(不是 ISO8601。是 RFC3339 吗?)
- 如何使用 Transact-Sql 将其转换为 DateTime?
编辑 这是一个摘要答案,由其他人输入拼凑而成:
- 它是ISO8601,与 UTC 有时间偏移。如果是 UTC,它将以“Z”而不是“+01:00”结尾。 维基百科
您可以将其转换为当地时间或 UTC,如下所示:
声明@d VARCHAR(25) 设置@d = '2007-08-08T00:01:00+01:00' 设置@d = '2007-08-08T00:01:00-01:00' 设置@d = ' 2007-08-08T00:01:00+05:30'
选择 @d 作为输入,CONVERT(DATETIME, LEFT(@d, 19), 126) 作为 LocalDate , DATEADD(MINUTE , -CAST((SUBSTRING(@d, 20, 1) + RIGHT(@d, 2)) 作为INT) , DATEADD(HOUR ,-CAST(SUBSTRING(@d, 20, 3) AS INT) , CONVERT(DATETIME, LEFT(@d, 19), 126))) as 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