1

我在一个表中有两列。

     x    |    y
  ========|=========
    AMDN  | AMDNOXYZ
    AMDNO | AMNOXYZ

我想比较两列并y根据列上的某些条件更新列x。如果列y中存在 x 列中不存在的字符,则只需删除这些字符而不是整个字符串。这个想法是在两列中逐个字符进行比较。在任何时间点, columny中都不能有任何不在column 中的字符,x换句话说, columny只能是 column 的子集x

所以结果将是

     x    |    y
  ========|=========
    AMDN  | AMDN
    AMDNO | AMNO

请帮忙。

4

1 回答 1

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)
于 2012-07-05T09:06:52.813 回答