• SqlServer正则 替换数据


    引用

    https://www.cnblogs.com/keepfool/archive/2012/03/25/2416911.html

    CREATE function dbo.regexReplace 
    ( 
    @source ntext, --原字符串
    @regexp varchar(1000), --正则表达式
    @replace varchar(1000), --替换值
    @globalReplace bit = 1, --是否是全局替换
    @ignoreCase bit = 0 --是否忽略大小写
    ) 
    returnS varchar(1000) AS 
    begin 
    declare @hr integer 
    declare @objRegExp integer 
    declare @result varchar(5000) 
    
    exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT 
    IF @hr <> 0 begin 
    exec @hr = sp_OADestroy @objRegExp 
    return null 
    end 
    exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp 
    IF @hr <> 0 begin 
    exec @hr = sp_OADestroy @objRegExp 
    return null 
    end 
    exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace 
    IF @hr <> 0 begin 
    exec @hr = sp_OADestroy @objRegExp 
    return null 
    end 
    exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase 
    IF @hr <> 0 begin 
    exec @hr = sp_OADestroy @objRegExp 
    return null 
    end 
    exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace 
    IF @hr <> 0 begin 
    exec @hr = sp_OADestroy @objRegExp 
    return null 
    end 
    exec @hr = sp_OADestroy @objRegExp 
    IF @hr <> 0 begin 
    return null 
    end 
    
    return @result 
    end 

    需要注意的是,即使写好了这个函数,也并不能马上使用。执行这个函数时可能会出现以下的错误:

    Msg 15281, Level 16, State 1, Line 1 SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ole Automation Procedures' by using sp_configure. For more information about enabling 'Ole Automation Procedures', see "Surface Area Configuration" in SQL Server Books Online.

    这是因为未开启Ole Automation Procedures选项,MSDN中的Ole Automation Procedures选项。执行下面的语句开启这个选项:

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO

    Example1:忽略大小写并替换

    select dbo.regexReplace('<A HREF="www.jileiba.com" target="_blank" style="color:red;">123456</a>','<a[^>]*>[^<]*</a>','',1,1)

    Example2: 使用贪婪匹配

    declare @html nvarchar(4000)='<p>
        Also Available - <a style="text-decoration: none" href="/isbn/9780199218691"><font
            color="#000FF"><b>Smith & Hogan: Criminal Law Cases & Materials 10th ed</b></font></a>
        <p>
            There is, as ever, detailed analysis of the many recent case developments, in particular,
            a revision of the chapter dealing with secondary liability and joint enterprise.</p>
    </p>'
    
    select dbo.regexReplace(@html,'<a[^>]*>(.|\n)*?</a>','',1,1)

    Example3:去除html标签

    select dbo.regexReplace('<p><b>Key Contact:</b><br> Mr  Jack,  Zhou<br> General Manager<br> <p> Mr  Adu,  Ho<br> Marketing Director<br> Overseas Sales<br> <p> Ms  Winny,  Luo<br> Sales Manager<br> Overseas Sales<br> <p>'
    ,'<[^>]*>','',1,0) 

    Example4:数据库字段值替换

    update Books 
    set [Description] = dbo.regexReplace([Description],'<a[^>]*>(.|\n)*?</a>','',1,1)
  • 相关阅读:
    《笨办法学python》 第14课手记
    《笨办法学Python》 第13课手记
    杭电2009----求数列的和
    杭电2008----数值统计
    杭电2007----平方和与立方和
    杭电2006----求奇数的乘积
    杭电2005----第几天?
    杭电2004---- 成绩转换
    杭电2003----求绝对值
    杭电2002----计算球体积
  • 原文地址:https://www.cnblogs.com/gxivwshjj/p/15576794.html
Copyright © 2020-2023  润新知