我在表格中有两列。
x | y
========|=========
AMDN | AMDNOXYZ
AMDNO | AMNOXYZ
我想比较两列,并根据列y
上的某些条件更新列x
。如果列y
中的字符在列x中不存在,则只删除那些字符而不是整个字符串。我们的想法是在两列中逐个字符进行比较。在任何时间点,y
列中不存在任何字符x
中不存在的字符,换句话说,列y
只能是列x
的子集
所以结果将是
x | y
========|=========
AMDN | AMDN
AMDNO | AMNO
请帮忙。
答案 0 :(得分:1)
这是在sql server中创建的一个函数,它将x和y列作为输入并返回所需的输出
create function remove_char(@x_string varchar(500),@y_string varchar(500))
returns varchar(500)
as
begin
declare @Y table(autoid int identity,c char(1))
declare @i int=1;declare @c char(1);
while(LEN(@y_string)>=@i)
begin
select @c=substring(@y_string,@i,1);
Insert into @Y values(@c)
select @i=@i+1
end
declare @X table(autoid int identity,c char(1))
set @i=1;
while(LEN(@x_string)>=@i)
begin
select @c=substring(@x_string,@i,1);
Insert into @X values(@c)
select @i=@i+1
end
return( select STUFF(( select ''+c from @Y
where c in (select c from @X) order by autoid
FOR XML PATH('')),1,0,'') )
end
示例
select dbo.remove_char('AMDNO','AMNOXYZ')
您可以使用此功能更新表格
update <table> set y=dbo.remove_char(x,y)