一个replace的小讨论

bootupnow 2007-06-12 11:33:48
在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的方法。
...全文
385 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
y51704545 2007-07-24
  • 打赏
  • 举报
回复
关注~
bootupnow 2007-07-23
  • 打赏
  • 举报
回复
1个月前发的帖子了,自己再顶顶,看看还有没有高手发言。
gxlineji 2007-06-16
  • 打赏
  • 举报
回复
LZ的探讨精神好.
qnc1234567890() 思维好!!!
bootupnow 2007-06-15
  • 打赏
  • 举报
回复
有空来自己写一个函数试试吧,各位还有没有其他的建议?
madfrogzt 2007-06-15
  • 打赏
  • 举报
回复
LZ的探讨精神值得学习
bootupnow 2007-06-15
  • 打赏
  • 举报
回复
回复:hui_hui_2007(天行健)
方法是笨了点,常规方法。呵呵
bootupnow 2007-06-15
  • 打赏
  • 举报
回复
楼上的charindex是个好的例子,不错不错。希望更多达人提供见解,一起散分呵呵。
qnc1234567890 2007-06-15
  • 打赏
  • 举报
回复
create function aaa( @str varchar(500) )
returns varchar(500)
as
begin

set @str=case when charindex('b',@str)>0 then replace(@str,'b','x') else '0' end
set @str=case when charindex('d',@str)>0 then replace(@str,'d','x') else '0' end
set @str=case when charindex('f',@str)>0 then replace(@str,'f','x') else '0' end
return @str
end

declare @s varchar(500)
set @s='abcdefghijk'
select fradbreader.aaa(@s)
hui_hui_2007 2007-06-15
  • 打赏
  • 举报
回复
楼主精神可贵呀.
bootupnow 2007-06-15
  • 打赏
  • 举报
回复
就没有封成函数或过程了,呵呵
bootupnow 2007-06-15
  • 打赏
  • 举报
回复
现在有字符串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)
ReViSion 2007-06-13
  • 打赏
  • 举报
回复
不支持,只能一个一个写,
不过可以自己写个涵数来实现呀
hui_hui_2007 2007-06-13
  • 打赏
  • 举报
回复
好象这个函数不支持通配符吧.
hui_hui_2007 2007-06-13
  • 打赏
  • 举报
回复
对呀,写个自定义函数呀.

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧