【问题标题】:SQL Server Convert ISO 8601 not working as documentedSQL Server Convert ISO 8601 未按文档说明工作
【发布时间】:2014-02-07 07:22:01
【问题描述】:

MSDN convert 应该使用 127 作为样式参数正确解析 ISO 8601 日期和时区。

可选的时区指示符 Z 用于更轻松地将具有时区信息的 XML 日期时间值映射到没有时区的 SQL Server 日期时间值。 Z 是时区 UTC-0 的指标。其他时区以 + 或 - 方向的 HH:MM 偏移量表示。例如:2006-12-12T23:45:12-08:00。

以下都是有效的 ISO 8601 日期,但返回从字符串转换日期和/或时间时转换失败

select convert(datetime, N'2014-02-07T13:51:00+07:00', 127)
select convert(datetime, N'2014-02-07T13:51:00+07', 127)
select convert(datetime, N'2006-12-12T23:45:12-08:00', 127)

有人对此问题有解决方案或解决方法吗?

【问题讨论】:

  • 看起来您正在指定需要Z 而不是时区的样式。显然这与您的输入字符串不匹配。

标签: sql sql-server datetime


【解决方案1】:

解决方法?:使用datetimeoffset

select convert(datetimeoffset, N'2014-02-07T13:51:00+07:00', 127) --<-- This one works...
select convert(datetimeoffset, N'2014-02-07T13:51:00+07', 127)
select convert(datetimeoffset, N'2006-12-12T23:45:12-08:00') --<-- and this one works...

【讨论】:

  • 感谢超级快速准确的回答!
  • 与 SQL Server 2008 及更高版本相关。
【解决方案2】:

使用datetimeoffset or datetime2 而不是datetime

【讨论】:

  • 是的,你告诉他们。这会教他迟到八分钟。
猜你喜欢
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
相关资源
最近更新 更多