SQL Server比较字符和更新列

问题描述:

我有一个表中的两列。SQL Server比较字符和更新列

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

我想基于x列一定的条件下,比较两列和更新列y。如果列y中的字符不存在于列x中,则只删除那些不是整个字符串的字符。这个想法是在两列中逐字比较。在任何时间点,列y中不存在任何不存在于列x中的字符,换句话说,列y只能是列x的子集。

那么结果将是

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

请帮助。

+0

发布您的查询尝试。我们不在这里做你的工作。 – stefan

+0

@stefan我不知道要使用什么函数。我发现没有办法将varchar转换为char数组进行比较。我真的在寻求帮助。至少指导什么使用。 –

+0

你说的问题的方式只有那些做你的整个工作的人可以提供一个正确的答案。如果你想问你的子问题更通用的问题,它可能会给你更多的选票。我们大多数人都是专业人员,我们不会让其他程序员免费工作。 – stefan

这是在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)>[email protected]) 
    begin 
     select @c=substring(@y_string,@i,1); 
     Insert into @Y values(@c) 
     select @[email protected]+1 
    end 

    declare @X table(autoid int identity,c char(1)) 
    set @i=1; 
    while(LEN(@x_string)>[email protected]) 
    begin 
     select @c=substring(@x_string,@i,1); 
     Insert into @X values(@c) 
     select @[email protected]+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)