选择包含字符串中附近单词的记录

时间:2018-01-23 09:57:56

标签: mysql

我正在尝试获取包含字符串中类似单词的记录。我知道mysql中的%%技巧可以获取所需的数据,如

DispatchQueue

但如果没有精确的过滤词呢?喜欢而不是" LORFAST"如果我写" LORFST"然后它不会返回任何记录。

select * from products where Name like '%LORFAST%'

期望:即使我错过了应该返回附近比赛的任何角色。上面的查询应该返回" LORFAST TAB。"任何想法怎么做??

http://sqlfiddle.com/#!9/30b949/2

代码

select * from products where Name like '%LORFST%'

1 个答案:

答案 0 :(得分:2)

您可能会从SOUNDEX功能获得一些里程数。请考虑以下查询:

SELECT 'true'
FROM dual
WHERE SOUNDEX('LORFAST') LIKE SOUNDEX('LORFST');

这会输出true,因为SOUNDEX非常智能,可以检测到两个版本的LORFAST听起来是一样的。

在您的示例数据的上下文中,假设您要使用LORFST搜索名称,即LORFAST的缩写形式。然后我们可以使用以下查询:

SELECT *
FROM products
WHERE SOUNDEX(Name) LIKE CONCAT('%',SOUNDEX('LORFST'),'%');

按照以下链接获取上述查询的小提琴。

正如@Coder评论的那样,使用Levenshtein距离之类的东西可能是更好的通用解决方案。

Demo