簡體   English   中英

SQL Server - XQuery - 子串

[英]SQL Server - XQuery - Substring

在SQL Server上檢索值AB的最佳方法是什么? 我有以下作為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類型列的一部分意味着什么?

  • 您的示例不是有效的XML(加倍"符號?)
  • 您的XML有一個奇怪的設計( Data中的嵌套Data ......)

有沒有理由不這樣(更好的查詢!)?

<Teams>
  <Team DataElement="Test" Name="A"/>
  <Team DataElement="Test" Name="B"/>
</Teams>

由於XML(除了SQL Server)是一種固有的排名順序,因此您不需要“第一”或“第二”團隊。 那么,你可以添加一個屬性來指定這個...

如果這是一個大型XML的片段,你必須考慮這一點

  • 真正的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM