我有一个带有XML列的表,如下所示。 XML列在未编码的XML中包含一些编码的XML。
OrderID UserDefXML
1 <Order><OrderDetail><LineItem><ItemName>XYZ</ItemName><Custominfo> <PrimaryName>STACKOVERFLOW </PrimaryName></Custominfo></LineItem></OrderDetail></Order>
我需要提取所有PrimaryName LIKE 'STACK%'
的行。这个查询应该是什么样的?
答案 0 :(得分:2)
您可以首先将编码的XML字符串 - Custominfo
元素的内容 - 转换为XML数据类型,例如:
SELECT t.*, x.lineItem.value('Custominfo[1]','varchar(max)') 'CustomInfo'
FROM YourTableName t
CROSS APPLY t.UserDefXML.nodes('/Order/OrderDetail/LineItem') as x(lineItem)
WHERE
CONVERT(XML, x.lineItem.value('Custominfo[1]','varchar(max)')).value('PrimaryName[1]','varchar(max)')
LIKE 'STACK%'
<强> Sqlfiddle Demo
强>
输出