我的表中有一个列,其中一个元组中的值如下:
<p> <element id="16342123118940031"></element> <element id="16342123118940033"></element> <element id="16342123162580033"></element> <element id="16342123187750034"></element> </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。
您唯一的问题是将
非分隔符转换为正确的XML版本 
。
我假设问题中的
"
只是字符串从一些客户端代码转义,并且实际上不在列
SELECT x.elem.value('@id','nvarchar(100)')
FROM YourTable t
CROSS APPLY (VALUES(
CAST(REPLACE(t.YourHtml, N' ', N' ') 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' ', N' ') AS xml)
)) v(xml)
CROSS APPLY v.xml.nodes('p/element/@*') x(elem);
,db<的在小提琴