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

replace疑难
AB有以下组合:
AAA,BAA,ABA,AAB,BBB,ABB,BAB,BBA.
某个字符串中含有
1.1个BAA之后加A或BB或BAB(注意:BAA的反式是ABB)
例1-‘BAAA’‘BAABB’‘BAABAB’
2.N个BAA之后加A或BB或BAB
例2-‘BAABAAA’‘BAABAABAABB’‘BAABAABAABAABAABAB’...
现在处理:
1.对‘BAA’(包括1个或者N个)之后A或BB或BAB(只需处理一次)进行处理,换成字符C或CC或CCC。
2.对N个‘BAA’中的除了第一个‘BAA’进行处理,换成字符CCC.
以上过程中,不用处理的字符都保持原状。
-------
例1-‘BAAA’‘BAABB’‘BAABAB’
转换成
-‘BAAC’‘BAACC’‘BAACCC’
2.N个BAA之后加A或BB或BAB
例2-‘BAABAAA’‘BAABAABAABB’‘BAABAABAABAABAABAB’
转换成
-‘BAABAAC’‘BAACCCCCCCC’‘BAACCCCCCCCCCCCCCC’

不用replace可以达到该结果也行。求教于各位高手!



------解决方案--------------------
如果只保留第一个BAA倒简单了,创建以下函数(第一次创建用create function ,修改用alter function)
create function fun_str2( @str1 varchar(100))
returns varchar(100)
as
begin
declare @str2 varchar(100)
declare @t varchar(100)
declare @lenth int
declare @num int
set @t= ' '
set @num=1
select @lenth=len( ' '+@str1+ ' ')-3
while @num <=@lenth
begin
set @t=@t+ 'C '
set @num=@num+1
end
return substring( ' '+@str1+ ' ',1,3)+@t
end

select dbo.fun_str2( 'BAABAABABBB ')
-----------
BAACCCCCCCC