1

テーブルに 2 つの列があります。

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

ycolumnの特定の条件に基づいて、2 つの列を比較し、 column を更新したいと考えていますx。列 x に存在しない文字が列yにある場合は、文字列全体ではなく、それらの文字を削除するだけです。アイデアは、両方の列で文字ごとに比較することです。任意の時点で、 columnyに存在しない文字が column に存在することはできません。xつまり、 columnyは column のサブセットにしかなれませんx

したがって、結果は次のようになります

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

助けてください。

4

1 に答える 1

1

これはSQLサーバーで作成された関数で、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 に答える