[英]SQL Server - XQuery - Substring
在SQL Server上检索值A和B的最佳方法是什么? 我有以下作为XML类型列的一部分。
<Data Name=""Teams"">
<Data DataElement=""Test"" Value=""FirstTeam=A;SecondTeam=B;""/>
</Data>
是否更好地对查询结果进行子串(即使用sql substring)或者是否更有效地对xquery结果进行子串(即在xquery中使用子字符串)?
谢谢
您可以使用普通的xml.nodes从xml获取该值,然后根据需求解析该值
declare @xml xml =
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>'
select x.r.value(N'@Value', N'varchar(100)') as val from @xml.nodes('Data/Data') as x(r)
作为XML类型列的一部分意味着什么?
"
符号?) Data
中的嵌套Data
......) 有没有理由不这样(更好的查询!)?
<Teams>
<Team DataElement="Test" Name="A"/>
<Team DataElement="Test" Name="B"/>
</Teams>
由于XML(除了SQL Server)是一种固有的排名顺序,因此您不需要“第一”或“第二”团队。 那么,你可以添加一个属性来指定这个...
如果这是一个大型XML的片段,你必须考虑这一点
<
非常快 Value="
?)会导致意想不到的结果...... XML
...对于SUBSTRING
你必须做一个昂贵的演员...... 所以我明确建议:使用真正的XML方法导航到给定的内容并分离@Value
extra的内容。
尝试这样来获取内容:
DECLARE @XML XML=
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>';
SELECT @XML.value('(//Data[@DataElement="Test"]/@Value)[1]','nvarchar(max)');
DECLARE @tbl TABLE(YourXMLColumn XML);
INSERT INTO @tbl VALUES
(
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>'
);
SELECT Team.value('.','nvarchar(max)') AS Team
FROM @tbl AS tbl
CROSS APPLY (SELECT CAST('<x>' + REPLACE(YourXMLColumn.value('(//Data[@DataElement="Test"]/@Value)[1]','nvarchar(max)'),';','</x><x>') + '</x>' AS XML)) AS Splitted(X)
CROSS APPLY X.nodes('x') AS The(Team)
结果
Team
-----------
FirstTeam=A
SecondTeam=B
(你可能会再将它分成两列,但这是你现在应该自己解决的问题:-)。
事实上,您必须拆分一个值才能获得必须再次拆分的条目,这清楚地表明,这不是最好的设计......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.