查找相似类型的名称 | SQL中的模糊搜索
模糊搜索:
一种查找与模式近似匹配(而不是完全匹配)的字符串的技术。用户/审阅者经常不准确地捕获名称。打字错误是审阅者在捕获名称时经常犯的错误,导致数据不一致。但有时,我们无论如何都需要搜索或匹配这些不准确的数据。例如,用户应该匹配现有的客户记录,而不是创建不需要的重复项。
问题陈述 :
查找下表中描述的所有类型的错误类型,例如拼写错误、名称不完整、格式问题、缺少后缀。 FirstName LastName FirstName LastName Error Type Benjamin Sheriff Benjamin Sherrif Spelling Mistake Cocoa Fairchil Cocoa Fairchild Spelling Mistake Danuzio Pinheiro Danuzio Pinherio Spelling Mistake Jeff Voight Jeff Voigt Spelling Mistake Marie Prendergast Marie Prendergrast Spelling Mistake Michael Heinrich Michael Heinricy Spelling Mistake Nghia Le Nghia Lee Spelling Mistake Leonardo Madrigal Leonardo Madrigal Del Valle Incomplete Name Yolanda Balcazar Yolanda Balcazar-Rodriguez Incomplete Name J Garcia Martinez J Garcia-Martinez Formatting Issue Lauren Lord – Tuley Lauren Lord-Tuley Formatting Issue Virginia Pulley Alberts Virginia Pulley-Alberts Formatting Issue Connie Marks Connie Marks Iv Suffix Missing Daniel Ladd Daniel Ladd Jr Suffix Missing Rodrigo Delgado Rodrigo Delgado Jr Suffix Missing Thomas Griffin Thomas Griffin Iii Suffix Missing Wayne Nance Wayne Nance Ii Suffix Missing
解决方法:
SOUNDEX()函数可以发现名称的不一致。 SOUNDEX() 可以评估两个名字的相似度。 SOUNDEX() 仅在我们有 1 或 2 个令牌时才有效。 Names 通常包含 1-2 个标记,因此它可以与 Name 一起使用。但是如果我们想为公司找到相似的名称,那么它就没有那么有用了,因为它包含多个令牌。
数据 :
Benjamin Sheriff 和 Benjamin Sherrif,其中 FirstName 相同,但 LastName 中的任何一个都有拼写错误。同样,此数据中存在许多错误,例如格式问题、名称不完整。 FirstName LastName Benjamin Sheriff Benjamin Sherrif Virginia Pulley Alberts Virginia Pulley-Alberts Geoffery Bown Geoffrey Bown Anthoni Castoldi Anthony Castoldi Rodrigo Delgado Rodrigo Delgado Jr Leonardo Madrigal Leonardo Madrigal Del Valle Mitchel Myers Mitchell Myers
代码 :
案例 1:FirstName 完全相同,但 LastName 是类似的类型。
案例 2:LastName 完全相同,但 FirstName 是类似的类型。
下面我们一一讨论。
情况1 :
FirstName 完全相同,但 LastName 是类似的类型:
select distinct ss.firstname,ss.lastname,sd.firstname,sd.lastname
from load as ss, load as sd
where ss.firstName=sd.firstName and SOUNDEX(ss.lastName)=SOUNDEX(sd.lastname)
and
left(ss.lastname,2)=left(sd.lastname,2)
and
ss.lastName<>sd.lastName
输出 : FirstName LastName FirstName LastName Benjamin Sheriff Benjamin Sherrif Benjamin Sherrif Benjamin Sheriff Leonardo Madrigal Leonardo Madrigal Del Valle Leonardo Madrigal Del Valle Leonardo Madrigal Rodrigo Delgado Rodrigo Delgado Jr Rodrigo Delgado Jr Rodrigo Delgado Virginia Pulley Alberts Virginia Pulley-Alberts Virginia Pulley-Alberts Virginia Pulley Alberts
案例2:
LastName 完全相同,但 FirstName 类型相似:
select distinct ss.lastname,ss.firstname,sd.lastname,sd.firstname
from load as ss, load as sd
where ss.lastname=sd.lastname and SOUNDEX(ss.firstname)=SOUNDEX(sd.firstname)
and
left(ss.firstname,2)=left(sd.firstname,2)
and
ss.firstname<>sd.firstname
输出 : S.No. FirstName LastName FirstName LastName 1. Anthoni Castoldi Anthony Castoldi 2. Anthony Castoldi Anthoni Castoldi 3. Geoffery Bown Geoffrey Bown 4. Geoffrey Bown Geoffery Bown 5. Mitchel Myers Mitchell Myers 6. Mitchell Myers Mitchel Myers
参考 :
Github 链接 – https://github.com/SuryaSD/Finding-Similar-Types-of-Names-Fuzzy-Search