sql中的字符串匹配

sql中的字符串匹配,sql,regex,Sql,Regex,我不确定在不编写高级算法的情况下这是否可行,但在sql中是否有一种方法可以比较两个字符串,并在其中获得相同数量的匹配字符的百分比?有人手工输入了大量字符串,我需要减少它们的唯一性。例如,如果我有“LOT&SIGN LIGHTING”、“SIGN LIGHTING”和“ELECTRICIAN”,我想循环浏览一个单词列表(“SIGN”、“Pimming”、“ELECTRIC”),并返回一个匹配的百分比,这样我就可以替换原来的,如果,比方说,它的相似性超过85% SQL标准没有像您所要求的那样包含任何

我不确定在不编写高级算法的情况下这是否可行,但在sql中是否有一种方法可以比较两个字符串,并在其中获得相同数量的匹配字符的百分比?有人手工输入了大量字符串,我需要减少它们的唯一性。例如,如果我有“LOT&SIGN LIGHTING”、“SIGN LIGHTING”和“ELECTRICIAN”,我想循环浏览一个单词列表(“SIGN”、“Pimming”、“ELECTRIC”),并返回一个匹配的百分比,这样我就可以替换原来的,如果,比方说,它的相似性超过85%

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

具有
levenshtein()

           "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

我想你可能会发现Levenshtein距离很有用。有些数据库内置了此功能。其他数据库有用户定义的函数。您使用的是哪个SQL数据库?它们都有不同的字符串函数。它总是完整的搜索短语吗?那么,如果你发现一个“S”和接下来的四个字母匹配“SIGN”,那么这是一个成功吗?或者“MySiggy”会因为合适的“Sig”而获得75%的点击率吗?如果是第一种,算法就不会那么复杂了。只要找到第一个字母的位置并检查下一个子串…@Shnugo我无论如何都不相信它,我处理的数据到处都是拼写错误和不一致。