我正在尝试使用 SQLCONVERT命令将 aVARCHAR转换为DATETIMESQL Server 2012 中的a 。我正在按照说明操作,并且我想使用此 MSDN 页面上描述的日期/时间格式:http : //msdn.microsoft.com /en-us/library/ms187928.aspx
基于此,格式#127描述如下:
- ISO8601 时区 Z。
- 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)
Run Code Online (Sandbox Code Playgroud)
...出现以下错误:
从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。
有谁知道为什么这不起作用?
编辑:该示例也不起作用:
SELECT CONVERT(datetime, '2006-12-12T23:45:12-08:00', 127)
Run Code Online (Sandbox Code Playgroud)
从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,第 1 行转换失败。
由于它是一个带有时区的字符串,因此您需要将其转换为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
Run Code Online (Sandbox Code Playgroud)
这工作得很好。一旦有了它,您就可以DATETIME根据需要将其转换为本地文件,例如
DECLARE @DateTimeOffset DATETIMEOFFSET
CAST(@DateTimeOffset AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
或者通过将值切换到另一个时区
SELECT SWITCHOFFSET(@DateTimeOffset, '+01:00')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2691 次 |
| 最近记录: |