我正在尝试获取包含字符串中类似单词的记录。我知道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%'
答案 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距离之类的东西可能是更好的通用解决方案。