[英]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.