【问题标题】:Reading Max value from the XML file VIA SQL通过 SQL 从 XML 文件中读取最大值
【发布时间】:2019-11-14 18:59:48
【问题描述】:

我的数据存储在表Transactiontable 中。我在表中有列,其中之一是存储 XML 数据的PostIT

enter image description here---表格图片

enter image description here---XML 图像

我必须从 xml 文件中读取最大或最近的交易日期时间。

我能够读取第一个节点

select 
    convert(xml.Transactiontable).value ('Transaction/DateTime[2]','DATETIME') 
from 
    dbo.transactiontable;

我必须阅读所有交易日期时间,我应该能够选择最大或最新交易

我尝试过交叉申请,但没有成功

select 
    T.N.value ('Transaction/DateTime[2]','DATETIME') 
from
    dbo.transactiontable
cross apply 
    XXX.nodes('TRANSACTION') as T(N)

【问题讨论】:

  • XML 支持高度特定于供应商 - 所以请添加一个标签来指定您是否使用mysqlpostgresqlsql-serveroracledb2 - 或完全不同的东西。另请在此处显示您在代码 sn-ps 中引用的 示例 XML
  • 以图片形式发布的 XML 和表结构
  • 这是另一件不太适合这里的大多数人的事情,因为它使创建测试小提琴变得更加困难。可以转成文字吗?或者更好的是,创建一个fiddle ?
  • 我假设您的数据库是 MS SQL Server。请为您的问题添加用于 DDL 和示例数据填充的 T-SQL 脚本。我们还需要基于您提供的数据样本的所需输出。一张图片是不够的。

标签: sql sql-server xml


【解决方案1】:

有几件事要先说:

  • 请不要将您的示例数据粘贴为图片。没有人愿意输入这个。
  • 最好是提供一个 MCVE 或一个带有 DDL 的小提琴、示例数据和您自己的尝试以及预期的输出。
  • 始终尽可能具体地标记。使用您的工具标记并提供供应商和版本。

现在回答你的问题:

还是有话要先说:

  • 您的 XML 包含与文化相关的格式的日期时间值。这是危险的。一些系统会将“01/05/2019”作为 5 月 1 日,而其他系统会将“01/05/2019”作为 1 月 5 日。
  • XML 难以阅读。如果我得到正确的图片,你有交替的 <Datetime><TRANSACTION_KEY> 元素。这似乎是他们的排序顺序,将他们紧紧联系在一起。这是一个糟糕的设计......

第一步试试这个:

SELECT dt.value('text()[1]','nvarchar(100)') AS SomeDateTimeValueAsString
FROM YourTable t
CROSS APPLY t.TheXmlColumn.nodes('/DATA/CO/TRANSACTION/DateTime') A(dt);

如果这还不足以让你跑起来,你将不得不在你的问题上投入更多的精力。

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多