Max*_*mus 6 xml sql-server sql-server-2012
我正在使用 SQL Server 2012,其中有一个表[abc]
,其中有一个名为[Information]
[XML] 类型的列。
此列具有以下值 -
<Information>
<Groups>
<Group Name="Monitor">
<Items>
<Item>
<Name>Cid</Name>
<Value>2323232323</Value>
</Item>
<Item>
<Name>Tid</Name>
<Value>6656565656</Value>
</Item>
</Items>
</Group>
</Groups>
</Information>
Run Code Online (Sandbox Code Playgroud)
如何编写可以查询此列并进一步提取值的 SQL 查询[Tid]
?
Mik*_*son 10
从你的问题来看,你在这里想要什么并不完全清楚。我的猜测是您想要<Value>
节点所在<Name>
节点的值Tid
。
使用nodes()
on 函数粉碎 XML/Information/Groups/Group/Items/Item
并添加谓词[Name/text()="Tid"]
以检查 的值<Name>
。
declare @T table(X xml not null);
insert into @T(X) values
('<Information>
<Groups>
<Group Name="Monitor">
<Items>
<Item>
<Name>Cid</Name>
<Value>2323232323</Value>
</Item>
<Item>
<Name>Tid</Name>
<Value>6656565656</Value>
</Item>
</Items>
</Group>
</Groups>
</Information>');
select I.X.value('(Value/text())[1]', 'bigint') as Value
from @T as T
cross apply T.X.nodes('/Information/Groups/Group/Items/Item[Name/text()="Tid"]') as I(X);
Run Code Online (Sandbox Code Playgroud)
如果您只需要<Name>Tid</Name>
,您的查询将如下所示:
DECLARE @x XML = N'
<Information>
<Groups>
<Group Name="Monitor">
<Items>
<Item>
<Name>Cid</Name>
<Value>2323232323</Value>
</Item>
<Item>
<Name>Tid</Name>
<Value>6656565656</Value>
</Item>
</Items>
</Group>
</Groups>
</Information>
';
DECLARE @x_table TABLE (x XML);
INSERT @x_table ( x )
VALUES ( @x );
SELECT ca.c.value('.', 'NVARCHAR(3)')
FROM @x_table AS x
CROSS APPLY x.x.nodes('/Information/Groups/Group/Items/Item/Name/text()') AS ca(c)
WHERE ca.c.exist('. [.="Tid"]') = 1;
Run Code Online (Sandbox Code Playgroud)
如果您需要其他东西,请告诉我。
归档时间: |
|
查看次数: |
694 次 |
最近记录: |