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

这样的程序该怎样写
表一中有两个字段field1,field2
field1中的数据是类似这样的000101@000102@000104@000105@000107
field2中的数据是类似这样的000209@000101@000206@000105

我希望通过select语句field1中的数据时进行这样的替换。
替换规则:
以@为分割符将field1中和field2中都出现的字符串从field1中删除,比如说000101在两者中都出现过,则从field1中删除,然后进行下一次比较,如000105也在二者中出现,则将其从field1中删除掉,最后field1中的数据变为@000102@000104@000107

------解决方案--------------------
create table #t(field1 varchar(100),field2 varchar(100))
insert into #t
select '000101@000102@000104@000105@000107 ', '000209@000101@000206@000105 '
GO
create function udf_splitstring
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab values(@str)
return
end
GO
create function udf_replacestr
(@str1 varchar(100),
@str2 varchar(100))
returns varchar(100)
as
begin
select @str1=replace(@str1,t.istr+ '@ ', ' ')
from udf_splitstring(@str2, '@ ')t
where charindex(t.istr,@str1)> 0
return @str1
end
GO
select dbo.udf_replacestr(field1,field2) from #t
/*

--------------------------
000102@000104@000107

(所影响的行数为 1 行)
*/