一个复杂的问题,字符串比对

odbc1230 2012-02-06 02:55:10
有三个表,第一个表里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.请教大家了,谢谢
...全文
212 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
anlianganl 2012-02-07
  • 打赏
  • 举报
回复
给点建议,不知是否可行。
1.首先,要先筛选一遍,把相等和不相等的筛选出来。
2.之后对这些不想等的字符串进行分组
1.也就是把字符串拆开成单个字符进行比较。
比如 1q2w3e4r5t6y7u8i9o0p
拆成 分组ID 字符
1 1
1 q
1 2
1 w
.....
这样进行进行比较 相等或不相等,之后统计下个数。
Vidor 2012-02-06
  • 打赏
  • 举报
回复
函数开头加一句
if (@s1=@s2) return 0
Vidor 2012-02-06
  • 打赏
  • 举报
回复
SQL也不会快,try

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')
odbc1230 2012-02-06
  • 打赏
  • 举报
回复
是因为客户端处理很慢,才想到用SQL放到服务器做的,呵呵,字符串都是定长的。
勿勿 2012-02-06
  • 打赏
  • 举报
回复
本来是客户端处理的东西放到数据库来做很麻烦
duoxu1983 2012-02-06
  • 打赏
  • 举报
回复
没法比。。等高人
紫竹林畔 2012-02-06
  • 打赏
  • 举报
回复
模糊比较
这帮顶
真不会~~~~
我是石头 2012-02-06
  • 打赏
  • 举报
回复
这字符要是没有规律又很长的话,会搞死人哦

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧