我正在尝试找到一种方法来运行查询以检查是否有任何xml文件包含某些内容,如果为true,则在该xml中返回一个不同的标记。 示例:
<shop>
<item>
<Product>shirt</Product>
<color>red</color>
</item>
<item>
<Product>shirt</Product>
<color>yellow</color>
</item>
<item>
<Product>jeans</Product>
<color>blue</color>
</item>
</shop>
假设col名称是XML,我可以找到所有衬衫的cols,我想要得到衬衫的颜色
[XML].exist ('/shop/item/Product[contains(., "shirt")]') > 0);
我希望能够得到一张桌子或一系列衬衫颜色。那可能吗? 我正在使用SQL 2012
答案 0 :(得分:4)
在item
元素上粉碎XML,因为我们需要从每个XML中选择多个color
:
SELECT P.I.value('color[1]', 'varchar(100)') AS shirt_color
FROM YourTable t
CROSS APPLY t.[XML].nodes('/shop/item[contains(Product[1], "shirt")]') as P(I)
<强> rextester demo
强>
另请注意,通过使用CROSS APPLY
和XPath / XQuery,没有任何“衬衫”项的行将被过滤掉,因此我们在上面不再需要exist()
。