如何匹配带有附加部分的字符串,但如果它们具有不同的附加部分,则不匹配它们? 例如,如果我有一个名字列表,并且需要将其与我的数据库中的名字匹配:
| My DataBase | Foreign table | | David James Malan Neeko | David James Malan | | David James Malan Neeko | David James Malan Mathew | | David James Malan Neeko | David jam Mlan |
我试过先进行完全匹配,如果没有找到,我会继续从外部名字字符串的末尾删除一个字符,然后再次尝试匹配,直到只有一个记录与我的数据库匹配。
这种技术可以匹配上表中的第一和第三个示例,但问题是它也匹配了第二个示例,因为程序每次都会删除一个字符,直到整个Mathew单词被删除,然后找到了一个匹配,这在这种情况下是错误的匹配。
有什么建议可以让我只进行完全匹配或匹配但只有一边有名字的附加部分,但如果它们都有两个不同的名字部分,则不匹配它们。
可以使用SQL或Python来解决这个问题。
提前感谢您的帮助。
P粉1455438722023-09-21 11:25:47
这是非常低效的,将需要进行全表扫描。
SET @name_str = 'David James Malan Neeko'; SELECT * FROM tbl WHERE name LIKE CONCAT(@name_str, '%') OR @name_str LIKE CONCAT(name, '%') ORDER BY name = @name_str DESC, name LIKE CONCAT(@name_str, '%') DESC;
ORDER BY
子句中的第一个表达式将首先对完全匹配进行排序,然后第二个表达式将对以整个搜索字符串开头的 name
进行排序,然后是以 name
开头的搜索字符串。
显然,你可以直接将搜索字符串作为参数传递,而不是使用 SET @name_str = '...';
。
这里有一些示例的 db<>fiddle。