日期:2014-05-18  浏览次数:20346 次

一个replace的小讨论2
在mssql中replace可以替换相应的字符,如我要替换

declare   @str   varchar(20)  
set   @str   =   'abcdefghijk '
print   @str
print   replace(@str, 'b ', 'x ')   --   得到结果   axcdefghijk

替换一个字符很容易,但是现在如果要替换字符b、d为x呢?
我想到的一个办法(嵌套来替换)
print   replace(replace(@str, 'b ', 'x '), 'd ', 'x ')   --   得到结果   axcxefghijk

现在如果要替换再多点的字符b、d、g、j为x呢?
若按照老方法,嵌套下去代码越来越多、繁琐,请大家看看有没有什么简单明了点的方法,比如使用类似in的方法。


现在有字符串A:abcdefghijk
需要将串A中的:acegik   替换成对应的:XYZNPQ


空闲时间还是自己搞了下,写了一个处理过程,很粗略实现功能,就当作抛砖引玉了,各位高手欢迎发表自己的解决方法啊!!!


declare   @str   varchar(2000),@srcKey   varchar(20),@desKey   varchar(20),@result   varchar(20)
declare   @sql   varchar(2000),@tmpSrcStr   varchar(2000),@exesql   varchar(3000)
declare   @tmpSrcKey   varchar(2000),@tmpDesKey   varchar(2000)
declare   @i   int  
select   @str   =   'abcdefghijk ', --   待搜索的字符串表达式集合
@srcKey   =   'acegik ', --   待查找的字符串表达式集合
@desKey   =   'XYZNPQ ', --   替换用的字符串表达式集合
@tmpSrcStr   =   ' ', --   用于拼接replace表达式
@sql   =   ' ', --   拼凑构造出来的SQL
@tmpSrcKey   =   ' ', --   待搜索的char
@tmpDesKey   =   ' ' --   待查找的char

set   @i   =   1
while   (@i   <=   len(@srcKey))
begin
set   @tmpSrcKey   =   substring(@srcKey,@i,1)
set   @tmpDesKey   =   substring(@desKey,@i,1)
if   @i   =   1
--   第一次要构造形如:replace( 'abcd ', 'b ', 'x ')
set   @tmpSrcStr   =   @tmpSrcStr   +   'replace( ' ' '   +   @str   +   ' ' ', ' ' '   +   @tmpSrcKey   +   ' ' ', ' ' '   +   @tmpDesKey   +   ' ' ') '
else
--   后面的要构造形如:replace(replace( 'abcd ', 'b ', 'x '), 'd ', 'x ')   ,内层的【replace( 'abcd ', 'b ', 'x ')】作为一个整体
set   @tmpSrcStr   =   @tmpSrcStr   +   'replace( '   +   @str   +   ', ' ' '   +   @tmpSrcKey   +   ' ' ', ' ' '   +   @tmpDesKey   +   ' ' ') '

print   '第 '   +   cast(@i   as   varchar(20))   +   '次拼接   @tmpSrcStr   =   '   +   @tmpSrcStr
set   @str   =   @tmpSrcStr   --   每次都拼凑一个内层replace
print   '@str   =   '   +   @str
set   @sql   =   @str --   构造一个sql
set   @tmpSrcStr   =   ' '
set   @i   =   @i   +   1
print   ' '
end
set   @exesql   =   'print   '   +   @sql
print   '准备执行的语句: '   +   @exesql
exec   (@exesql)


------解决方案--------------------
declare @a varchar(100),@b varchar(100),@c varchar(100),@y varchar(100)
set @y= ' '
set @a= 'abcdefghijk '
set @b= 'acegik '
set @c= 'XYZNPQ '

select top 100 id=ident