Sql server SQL Server比较字符和更新列
我在一个表中有两列Sql server SQL Server比较字符和更新列,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我在一个表中有两列 x | y ========|========= AMDN | AMDNOXYZ AMDNO | AMNOXYZ 我想比较这两列,并根据列x上的某些条件更新列y。如果列y中有字符在列x中不存在,则只需删除这些字符而不是整个字符串。其思想是在两列中逐个字符进行比较。在任何时间点,列y中都不能有任何字符不在列x中,或者换句话说,列y只能是列x的子集 因此,结果将是 x | y ========|=======
x | y
========|=========
AMDN | AMDNOXYZ
AMDNO | AMNOXYZ
我想比较这两列,并根据列x
上的某些条件更新列y
。如果列y
中有字符在列x中不存在,则只需删除这些字符而不是整个字符串。其思想是在两列中逐个字符进行比较。在任何时间点,列y
中都不能有任何字符不在列x
中,或者换句话说,列y
只能是列x
的子集
因此,结果将是
x | y
========|=========
AMDN | AMDN
AMDNO | AMNO
请提供帮助。这是一个在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
范例
选择dbo.remove_char('AMDNO','AMNOXYZ')
您可以使用此函数更新表
update <table> set y=dbo.remove_char(x,y)
更新集y=dbo.remove_char(x,y)
这是在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
范例
选择dbo.remove_char('AMDNO','AMNOXYZ')
您可以使用此函数更新表
update <table> set y=dbo.remove_char(x,y)
更新集y=dbo.remove_char(x,y)
发布您的查询尝试。我们不是来做你的工作的。@stefan我不知道该使用什么函数。我找不到将varchar转换为char数组进行比较的方法。我真的在寻求帮助。至少要有关于使用什么的指南。你陈述问题的方式只有完成你全部工作的人才能提供正确的答案。如果你想对你的子问题提出一个更一般的问题,它可能会给你更多的选票。我们大多数人都是专业人士,我们不免费为其他程序员工作。通常我不在数据库层处理数据,而是在业务层处理数据。特别是字符串的编译和操作对于sql server函数来说非常枯燥。您能在业务层解决这个问题吗?@ADC否必须在表中更新此问题。请发布您的查询尝试。我们不是来做你的工作的。@stefan我不知道该使用什么函数。我找不到将varchar转换为char数组进行比较的方法。我真的在寻求帮助。至少要有关于使用什么的指南。你陈述问题的方式只有完成你全部工作的人才能提供正确的答案。如果你想对你的子问题提出一个更一般的问题,它可能会给你更多的选票。我们大多数人都是专业人士,我们不免费为其他程序员工作。通常我不在数据库层处理数据,而是在业务层处理数据。特别是字符串的编译和操作对于sql server函数来说非常枯燥。您能在业务层解决这个问题吗?@ADC否必须在表中更新此问题。