gpt4 book ai didi

sql - SQL Server 中针对 XML 类型列的 XPATH 查询

转载 作者:搜寻专家 更新时间:2023-10-30 22:27:25 26 4
gpt4 key购买 nike

我有一个表“TEST”,它有一个 xml 类型的列“info”。列信息有类似 XML

<RootEPS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EPS key="FirstName" value="Test" />
<EPS key="LastName" value="Singh" />
<EPS key="address1" value="23 t-2" />
<EPS key="EmailAddress" value="test.singh@gmail.com" />
</RootEPS>

我想创建一个 XPATH sql 查询来获取每个 EPS 节点的属性“值”的数据,例如根据给定的电子邮件,firstName 作为 fName,lastName 作为 lName。

对于输入电子邮件 test.singh@gmail.com 我想要这样的输出

fName  |  lName  | address1  |  email
Test | Singh | 23 t-2 | test.singh@gmail.com

我正在尝试类似的方法,但它不起作用

SELECT distinct
N.x.value('@value', 'nvarchar(100)') as fName,
N.x.value('@value', 'nvarchar(100)') as lName,
N.x.value('@value', 'nvarchar(100)') as address1,
N.x.value('@value', 'nvarchar(100)') as email,
FROM
TEST AS RO
CROSS APPLY
RO.info.nodes('/RootEPS/EPS[@key="EmailAddress" and @value="test.singh@gmail.com"]') AS N(x)

在输出中我只得到电子邮件值。主要是 N.x.value('@value' 部分有问题。

最佳答案

您正在选择单个 EPS 节点。在整个 RootEPS 节点上使用 values,您可以查询它的所有 EPS 子节点:

SELECT  info.value('(RootEPS/EPS[@key="FirstName"]/@value)[1]', 'nvarchar(100)') as fName
, info.value('(RootEPS/EPS[@key="LastName"]/@value)[1]', 'nvarchar(100)') as lName
, info.value('(RootEPS/EPS[@key="address1"]/@value)[1]', 'nvarchar(100)') as address1
, info.value('(RootEPS/EPS[@key="EmailAddress"]/@value)[1]', 'nvarchar(100)')
as email
FROM TEST
WHERE info.value('(RootEPS/EPS[@key="EmailAddress"]/@value)[1]', 'nvarchar(100)')
= 'test.singh@gmail.com'

Working example at SE Data.

关于sql - SQL Server 中针对 XML 类型列的 XPATH 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com