【问题标题】:Converting XML date (ISO 8061) to Datetime in SQL Server在 SQL Server 中将 XML 日期 (ISO 8061) 转换为日期时间
【发布时间】:2021-10-09 03:20:19
【问题描述】:

我有一个 XML 列,我从中提取日期时间:

SELECT PaymentXml.query('data(/PaymentSummary/SubmittedDate)') as 'ISO 8061 format'

但我想将它放入可以在 SQL Server 中使用的 DateTime。

直接转换为日期时间不起作用

,convert(datetime,PaymentXml.query('data(/PaymentSummary/SubmittedDate)')) as 'VarChar Format'

不允许从数据类型 xml 到日期时间的显式转换。

我可以把它转换成varchar

convert(varchar(150),PaymentXml.query('data(/PaymentSummary/SubmittedDate)')) as 'VarChar Format'

但无法在日期时间得到该结果。

,convert(datetime,convert(varchar(150),PaymentXml.query('data(/PaymentSummary/SubmittedDate)'))) as 'DateTime Format'

从字符串转换日期和/或时间时转换失败。

显然,我在 SQL Server 中使用 XML 已经 30 分钟了/我真的不知道我在做什么。

【问题讨论】:

  • 在您的专栏中发布一个字符串示例会很有帮助。但简单搜索“sql server convert iso 8601 to datetime”会发现很多建议让你开始。
  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。

标签: sql sql-server xml


【解决方案1】:

试试datetime2datetimeoffset,而不是datetime。 ISO 8601 日期时间精度超过常规 SQL Server datetime 列类型。

【讨论】:

  • 哇,这很容易 - datetime2
【解决方案2】:

首先,您应该使用.value 来获取单个XML 值,而不是.query

您可以使用 CONVERT(datetime2 和样式 127 来转换 ISO-8061 日期:

SELECT
    CONVERT(datetime2,
        PaymentXml.value('(/PaymentSummary/SubmittedDate/text())[1]','varchar(30)'),
        127) AS 'ISO 8061 format'
FROM YourTable

db<>fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2019-08-31
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多