2015-11-05 34 views
0

我不确定这是甚至可能没有写一些先进的算法,但有没有办法在SQL中比较两个字符串,并获得相同数量的匹配字符的百分比?有人手工输入了一串字符串,我需要使它们不那么独特。例如,如果我有“LOT & SIGN LIGHTING”,“SIGN LIGHTING”和“ELECTRICIAN”,我想循环查看单词列表(“SIGN”,“PLUMBING”,“ELECTRIC”),并返回匹配的百分比,所以我可以取代原来的,如果说它超过85%的相似。在sql中的字符串匹配

+2

我怀疑你可能会发现Levenshtein距离有用。一些数据库具有内置的这种功能。其他人有用户定义的功能。 –

+1

您正在使用哪个SQL数据库?它们都有不同的字符串功能。 – Schwern

+0

它始终是完整的搜索短语?那么,如果你找到一个“S”,并且接下来的四个字母匹配“SIGN”而不是它的命中?或者“MySiggy”会因为拟合“Sig”而被击中75%?如果第一个,算法不会那么复杂。只要找到第一个字母的位置,并检查下一个子字符串... – Shnugo

回答

2

SQL标准包含的东西不像你问的那样。您可以使用存储过程编写某些内容,但各种SQL数据库已经包含模糊匹配函数,可以计算字符串之间的相似性和差异性。

The PostgreSQL fuzzystrmatch modulelevenshtein()它将计算两个字符串之间的Levenshtein distance,基本上是您需要为获取相同字符串而进行的单个字符编辑的数量。

  "LOT & SIGN LIGHTING", "SIGN LIGHTING", "ELECTRICIAN" 
SIGN  15      9    9 
PLUMBING 15      9    9 
ELECTRIC 17      9    3 

正如你所看到的,它不是在识别多空字符串之间的关系非常有用。您可以减少插入,删除和替换字符的成本,使其更好地工作。例如,如果不匹配的成本增加到2 ...

  "LOT & SIGN LIGHTING", "SIGN LIGHTING", "ELECTRICIAN" 
SIGN  15      9    11 
PLUMBING 19      13    13 
ELECTRIC 21      15    3