在SQL Server中使用正则表达式替换文本

时间:2010-06-02 11:12:52

标签: sql sql-server regex replace

目前我有一个类型为nvarchar(max)的SQL服务器列,其文本以

开头
<span class="escape_<<digits>>"></span>

模式中唯一不同的是类名中的<<digits>>

常见的部分是

<span class="myclass_ 

和结束

</span>

一些样本值

<span class="myclass_12"></span>
<span class="myclass_234"></span>
<span class="myclass_4546"></span>

这些范围文本仅出现在列的开头。不应删除或匹配中间的任何此类匹配范围。

使用正则表达式进行SQL Server查询是为了删除所有这些span的出现?

2 个答案:

答案 0 :(得分:4)

SQL Server不支持开箱即用的正则表达式。

如果您使用的是SQL Server 2005或更高版本,则可以为SQL Server编写CLR函数并调用它。

有关如何执行此操作的详细信息,请参阅this MSDN杂志文章(SQL Server 2005&gt;正则表达式使模式匹配和数据提取更容易)。

答案 1 :(得分:4)

如果你有像

这样的值
<span class="myclass_12"></span>
<span class="myclass_234"></span>
<span class="myclass_4546"></span>

并且您希望从中获取myclass_12等值,请使用此查询:

SELECT 
    REPLACE(REPLACE(string, '<span class="', ''), '"></span>', '') 
FROM 
    dbo.YourTable

它不是基于正则表达式,因为默认情况下SQL Server / Transact-SQL不支持正则表达式匹配。如果您需要并希望通过各种方式进行Regex匹配,请考虑创建一个在SQL Server中实现该功能的SQL-CLR程序集。