有三个表,第一个表里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.请教大家了,谢谢

解决方案 »

  1.   

    是因为客户端处理很慢,才想到用SQL放到服务器做的,呵呵,字符串都是定长的。
      

  2.   

    SQL也不会快,trycreate function comstr(@s1 varchar(100), @s2 varchar(100))
    returns int
    as
    begindeclare @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
    endreturn @diffend
    goselect dbo.comstr('1q2w3e4r5t6y7u8i9o0p','kq2w3e4r5t6y7u8i9o0p')
    select dbo.comstr('1q2w3e4r5t6y7u8i9o0p','kq2w3abcdefg7u8i9o0p')
      

  3.   

    函数开头加一句
    if (@s1=@s2) return 0
      

  4.   

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