返回与另一个字符串的正则表达式匹配的所有字符串的列表



我的表中有一个列,其中一个元组中的值如下:

<p>&nbsp;<element id="16342123118940031"></element>&nbsp;&nbsp;<element id="16342123118940033"></element>&nbsp;&nbsp;<element id="16342123162580033"></element>&nbsp;&nbsp;<element id="16342123187750034"></element>&nbsp;</p>"

我想在其中一个元组上运行一个查询,并获取元组中匹配特定正则表达式的所有字符串的列表。

假设我想要所有以<element开始,以</element>结束的字符串。对于这个,我有一个正则表达式<element [^<element]+</element>。然后,查询应该返回一个元组中与此正则表达式匹配的字符串列表。对于上面的Value/Tuple,查询应该返回:

<element id="16342123118940031"></element>
<element id="16342123118940033"></element>
<element id="16342123162580033"></element>
<element id="16342123187750034"></element>

我如何使用SQL实现这一点?

谢谢。

看起来您可以将其转换为XML并使用XQuery。

您唯一的问题是将&nbsp;非分隔符转换为正确的XML版本&#160;

我假设问题中的"只是字符串从一些客户端代码转义,并且实际上不在列

SELECT x.elem.value('@id','nvarchar(100)')
FROM YourTable t
CROSS APPLY (VALUES(
CAST(REPLACE(t.YourHtml, N'&nbsp;', N'&#160;') AS xml)
)) v(xml)
CROSS APPLY v.xml.nodes('p/element') x(elem);

如果你不知道属性的名字,你也可以把它拉出来:

SELECT x.elem.value('local-name(.)','nvarchar(100)'), x.elem.value('.','nvarchar(100)')
FROM YourTable t
CROSS APPLY (VALUES(
CAST(REPLACE(t.YourHtml, N'&nbsp;', N'&#160;') AS xml)
)) v(xml)
CROSS APPLY v.xml.nodes('p/element/@*') x(elem);

,db&lt的在小提琴

最新更新