使用 SQL 查询进行 XML 文件翻译

库奇

我有一个使用 encoding="utf-16 的 SQL 查询编码的 Swift 消息 - 我使用了以下代码:

CAST(REPLACE(CAST(Content AS VARCHAR(MAX)), 'encoding="utf-16"', '')  AS XML) AS Content

我的 XML 结构的内容如下所示:

在此处输入图片说明

我想要达到的目标

我在这个结构中有一个包含多个 XML 文件的临时表,我正在尝试编写一个 SQL 查询,它将以标准结构的形式显示数据作为表

SELECT
    DateTimeCreated,
    t.value('(ApplicationHeaderBlock_Output/MessageType/text())[1]', 'varchar(100)') AS MessageType,
    e.value('(SequenceC/Date_C_98A/Date/text())[1]', 'DATE') AS XDTE,
    e.value('(SequenceC/Date_C_98A//Date/text())[1]', 'DATE') AS RDTE
FROM 
    #MTFILE
CROSS APPLY 
    Content.nodes('//SWIFTHeader') AS a(t)
CROSS APPLY 
    Content.nodes('//SWIFT_CATEGORY5_MT566') AS b(e)

DROP TABLE #MTFILE

问题和我想要实现的目标

我不确定如何修改我当前的 SQL 查询以从 XML 文件获得以下结果,因为当我尝试从 XML 文件指定路径时,您可以看到它是相同的(来自屏幕截图结构)。

我的观点是实现并看到如下结果:

| XDTE        | RDTE           |
| --------    | -------------- |
| 20210310    | 20211012       |

如果有人可以请指教?

伊扎克·哈宾斯基

因为您没有提供最小的可重现示例,所以我们需要假设您的SELECT ...陈述是合法的。

这是你的答案。

SQL

SELECT
    DateTimeCreated,
    t.value('(ApplicationHeaderBlock_Output/MessageType/text())[1]', 'varchar(100)') AS MessageType,
    e.value('(SequenceC/Date_C_98A[Qualifier/text()="XDTE"]/Date/text())[1]', 'DATE') AS XDTE,
    e.value('(SequenceC/Date_C_98A[Qualifier/text()="RDTE"]/Date/text())[1]', 'DATE') AS RDTE
FROM 
    #MTFILE
CROSS APPLY 
    Content.nodes('//SWIFTHeader') AS a(t)
CROSS APPLY 
    Content.nodes('//SWIFT_CATEGORY5_MT566') AS b(e);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章