【问题标题】:Text replace with regex in SQL Server在 SQL Server 中用正则表达式替换文本
【发布时间】:2011-02-26 18:39:32
【问题描述】:

目前我有一个nvarchar(max) 类型的 SQL 服务器列,其中包含以

开头的文本
<span class="escape_<<digits>>"></span>

模式中唯一不同的是类名中的&lt;&lt;digits&gt;&gt;

共同的部分是

<span class="myclass_ 

和结束

</span>

一些样本值是

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

这些跨度文本仅出现在列的开头。中间的任何这样的匹配跨度都不应该被删除或匹配。

使用正则表达式删除所有这些跨度出现的 SQL Server 查询是什么?

【问题讨论】:

    标签: sql sql-server regex replace


    【解决方案1】:

    SQL Server 不支持现成的正则表达式。

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

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

    【讨论】:

      【解决方案2】:

      如果你有类似的价值观

      <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 不支持正则表达式匹配。如果您需要并希望通过各种方式进行正则表达式匹配,请考虑创建一个 SQL-CLR 程序集,将该功能实现到 SQL Server 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-27
        • 2017-10-18
        • 2014-03-11
        • 2017-01-21
        • 2019-11-29
        • 1970-01-01
        相关资源
        最近更新 更多