ALTER function [dbo].[WholeWordReplace](
@s nvarchar(1000) --要搜索的字符串
,@s1 nvarchar(200) --要查找的字符串
,@s2 nvarchar(200) --替换字符串
)
returns nvarchar(1000)
as
begin
declare
@result nvarchar(1000) --返回值
,@prec nchar(1) --前一个字符
,@succ nchar(1) --后一个字符
,@i int --位置
;
SELECT @i=charindex(@s1, @s, 1);
while @i>0
begin
SELECT @prec=substring(@s,@i-1,1)
,@succ=substring(@s,@i+len(@s1),1);
--判断此字符串的前后字符, 在前后字符都不是字母、数字、_、@、#、$(命名规则中所有允许的字符)的情况下,对其替换
if (@prec < 'a' or @prec > 'z') and (@prec < 'A' or @prec > 'Z')
AND (@prec < '0' or @prec > '9')
AND (@prec!='_') AND (@prec!='@') AND (@prec!='#') AND (@prec!='$')
and (@succ < 'a' or @succ > 'z') and (@succ < 'A' or @succ > 'Z')
AND (@succ < '0' or @succ > '9')
AND (@succ!='_') AND (@succ!='@') AND (@succ!='#') AND (@succ!='$')
begin
SELECT @s = stuff(@s, @i, len(@s1), @s2), @i=@i+Len(@s2)-1;
end
SELECT @i=charindex(@s1, @s, @i+1);
end
SELECT @result=@s
return @result
END
参考正则替换:
http://blog.csdn.net/coleling/archive/2011/01/27/6166419.aspx