SQL利用正则表达式替换字符

/*
    利用正则表达式替换字符

    调用:

    1.获取字符串中的英文字符
    declare @str varchar(100)
    set @str='xyz123z5'
    select dbo.regexReplace(@str,'[^a-zA-Z]','',1,1)

    2.获取字符串中的英文字符长度
    declare @str varchar(100)
    set @str='xyz123z5'
    select len(dbo.regexReplace(@str,'[^a-zA-Z]','',1,1))
    
*/

Create function dbo.regexReplace
(
@source varchar(5000),    --原字符串
@regexp varchar(1000),    --正则表达式
@replace varchar(1000),   --替换
@globalReplace bit = 0,   --是否是全局替换
@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
posted @ 2008-08-01 10:10  supers  阅读(929)  评论(0)    收藏  举报