日期:2014-05-18  浏览次数:20469 次

一个复杂的问题,字符串比对
有三个表,第一个表里1个字段,放字符串A,大约70万条,第二个表里1个字段,放字符串B,大约10万条,现在要把表2里的数据逐条和表1里的比较,把比较结果放在表3,比如表2里有一条数据为“1q2w3e4r5t6y7u8i9o0p”表1里有类似数据,其中有类似的数据“kq2w3e4r5t6y7u8i9o0p”,这两条数据就1个字符不同,把有3个以内不同字符的数据比对出来放入表3,表3有三个字段,字段1放字符串1,字段2放字符串2,字段3放比对的结果,比如上两个字符就一个字符不同,就放1,如果2个字符不同就放2.请教大家了,谢谢

------解决方案--------------------
SQL也不会快,try

SQL code
create function comstr(@s1 varchar(100), @s2 varchar(100))
returns int
as
begin

declare @len int, @i int, @diff int
select @len=len(@s1), @i=1, @diff=0
while @i<=@len
begin
    if substring(@s1,@i,1)<>substring(@s2,@i,1) set @diff+=1
    if @diff>3 return 128
    set @i+=1
end

return @diff

end
go

select dbo.comstr('1q2w3e4r5t6y7u8i9o0p','kq2w3e4r5t6y7u8i9o0p')
select dbo.comstr('1q2w3e4r5t6y7u8i9o0p','kq2w3abcdefg7u8i9o0p')

------解决方案--------------------
给点建议,不知是否可行。
1.首先,要先筛选一遍,把相等和不相等的筛选出来。
2.之后对这些不想等的字符串进行分组
1.也就是把字符串拆开成单个字符进行比较。
比如 1q2w3e4r5t6y7u8i9o0p
拆成 分组ID 字符
1 1
1 q
1 2
1 w
.....
这样进行进行比较 相等或不相等,之后统计下个数。