有这样的一个字符串,如:IF(CHDS=1,0,6) 要把里面的CHDS替换掉,但是遇到单个字母时,则不进行替换,如遇到D时不进行替换,可不可以写个自定义的替换函数,实现这个功能。
具体的意思就是这样:select myreplace('IF(CHDS=1,0,1)','CHDS','1')
--输出
IF(1=1,0,1)
select myreplace('IF(CHDS=1,0,1)','D',10)
--则不进行替换,原样输出
IF(CHDS=1,0,1)
)
具体的意思就是这样:select myreplace('IF(CHDS=1,0,1)','CHDS','1')
--输出
IF(1=1,0,1)
select myreplace('IF(CHDS=1,0,1)','D',10)
--则不进行替换,原样输出
IF(CHDS=1,0,1)
)
returns varchar(50)
as
begin
select
@s=case
when len(@rp)>1
then replace(@s,@rp,@str)
else
@s
end
return @s
end
goselect dbo.myreplace('IF(CHDS=1,0,1)','CHDS','1')
set @s = 'IF(CHDS=1,0,1)'
select replace(@s,'CHDS','')
结果
IF(=1,0,1)这样?
RETURNS VARCHAR(100)
AS
BEGINDECLARE @ret VARCHAR(100)IF(LEN(@sstr2) <= 1) SELECT @ret = @sstr1
ELSE set @ret = REPLACE(@sstr1,@sstr2,@sstr3)RETURN @retEND
SELECT dbo.myreplace('IF(CHDS=1,0,1)','CHDS','10') select dbo.myreplace('IF(CHDS=1,0,1)','D','10')
不是,是要写个自己定义的replace函数
--输出结果
IF(CH10S=1,1,0)
而我要的结果是
遇到D是不进行替换的
意思要把CHDS当做一个整体来替换,如果只是部分字段就不能进行替换
CHDS是一个整体,故如果是D或者HD之类都不进行替换
create function myreplace(@s varchar(50),@rp varchar(10),@str varchar(10))
returns varchar(50)
as
begin
select
@s=case
when @rp not in ('c','h','d','s')
then replace(@s,@rp,@str)
else
@s
end
return @s
end
select dbo.myreplace('IF(CHDS=1,0,1)','Dh','1') IF(CHDS=1,0,1)
select dbo.myreplace('IF(CHDS=1,0,1)','CHDS','1') IF(1=1,0,1)
少写了一个条件。
create function myreplace(@s varchar(50),@rp varchar(10),@str varchar(10))
returns varchar(50)
as
begin
select
@s=case
when @rp not in ('C','H','D','S') and len(@rp)>3
then replace(@s,@rp,@str)
else
@s
end
return @s
end