我尝试使用SQL CONVERT
命令将SQL Server 2012中的VARCHAR
转换为DATETIME
。我按照说明操作,但我想要使用此MSDN页面上描述的日期/时间格式:http://msdn.microsoft.com/en-us/library/ms187928.aspx
基于此,格式#127描述如下:
- 带时区Z的ISO8601。
- yyyy-mm-ddThh:mi:ss.mmmZ(没有空格)
- 当毫秒(mmm)的值为0时,不显示毫秒值。例如,值' 2012-11-07T18:26:20.000显示为' 2012-11-07T18:26:20'。
- 可选的时区指示符Z用于更轻松地将具有时区信息的XML日期时间值映射到没有时区的SQL Server日期时间值。 Z是时区UTC-0的指示符。其他时区用+或 - 方向的HH:MM偏移表示。例如:2006-12-12T23:45:12-08:00。
但是,当我尝试实际进行转换(遵循此格式)时,它会失败......
SELECT CONVERT(datetime, '2014-07-14T10:00:00.000-08:00', 127)
...出现以下错误:
Msg 241,Level 16,State 1,Line 1
从字符串转换日期和/或时间时转换失败。
任何人都知道为什么这不起作用?
编辑:这个例子不起作用:
SELECT CONVERT(datetime, '2006-12-12T23:45:12-08:00', 127)
Msg 241,Level 16,State 1,Line 1
从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:3)
由于它是一个包含 timezone 的字符串,因此您需要将其转换为DATETIMEOFFSET
类型:
SELECT CONVERT(DATETIMEOFFSET, '2014-07-14T10:00:00.000-08:00', 127)
(No column name)
----------------------------------
2014-07-14 10:00:00.0000000 -08:00
这很好用。完成后,您可以根据需要将其转换为本地DATETIME
,例如与
DECLARE @DateTimeOffset DATETIMEOFFSET
CAST(@DateTimeOffset AS DATETIME)
或通过
将值切换到另一个时区SELECT SWITCHOFFSET(@DateTimeOffset, '+01:00')