【问题标题】:Remove All inline style from text in MSSQL从 MSSQL 中的文本中删除所有内联样式
【发布时间】:2018-02-28 08:24:02
【问题描述】:

我想从 MSSQLSERVER 中的 [Contnent] 中删除所有内联样式 清除 style="*" 中的所有内容

例如: <div style="color:red;font-size:12px;"> test <i style="color:blue;" > 2 </i> </div>

到: <div> test <i> 2 </i> </div>

【问题讨论】:

  • 似乎 SQL Server 本身不支持正则表达式,您知道将使用哪个正则表达式引擎吗?它可能会或不会,或多或少健壮,具体取决于引擎功能。
  • 我的 sql 版本是 2014,当我安装 sql 我选择所有功能。
  • sql server 不支持正则表达式
  • 所以请帮我创建删除两个字符串之间所有字符串的函数

标签: html sql sql-server regex


【解决方案1】:

在您的情况下,定义删除所有标签的函数很有用:

create function RemoveStyles(@html varchar(1000)) returns varchar(1000) as
begin

declare @tagIndex int
set @tagIndex = CHARINDEX(' style=', @html)

while @tagIndex > 0
begin
    set @html = SUBSTRING(@html, 1, @tagIndex - 1) + SUBSTRING(@html, CHARINDEX('"', @html, @tagIndex + 8) + 1, LEN(@html))
    set @tagIndex = CHARINDEX(' style=', @html)
end
return @html
end

那么你的查询就会变得非常简单(我在master数据库中创建了我的函数):

select master.dbo.RemoveStyles([Content]) from MY_TABLE

【讨论】:

    【解决方案2】:

    我找到了这个功能,但它删除了 STYLE 标签

      create FUNCTION [dbo].CleanHTML(@HTMLText varchar(MAX))
    RETURNS varchar(MAX)
    AS
    BEGIN
    DECLARE @Start  int
    DECLARE @End    int
    DECLARE @Length int
    
    
    SET @Start = CHARINDEX('<STYLE', @HTMLText)
    SET @End = CHARINDEX('</STYLE>', @HTMLText, CHARINDEX('<', @HTMLText)) + 7
    SET @Length = (@End - @Start) + 1
    
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0) BEGIN
    SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
    SET @Start = CHARINDEX('<STYLE', @HTMLText)
    SET @End = CHARINDEX('</STYLE>', @HTMLText, CHARINDEX('</STYLE>', @HTMLText)) + 7
    SET @Length = (@End - @Start) + 1
    END
    
    
    RETURN LTRIM(RTRIM(@HTMLText))
    
    END
    

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 2013-01-05
      • 2012-07-13
      • 2012-10-09
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多