我正在尝试获取字符串中包含类似单词的记录。我知道在mysql中获取所需数据的技巧,如
select * from products where Name like '%LORFAST%'
但是如果没有确切的过滤词呢??? 例如,如果我写“LORFST”而不是“LORFST”,那么它将不会返回任何记录。
select * from products where Name like '%LORFST%'
期望:即使我错过了任何一个角色,它也应该在比赛附近返回。上面的查询应该返回“LORFAST TAB”。知道怎么做吗??
http://sqlfiddle.com/#!9/30b949/2
代码
create table `products` (
`Id` int (11),
`Name` varchar (900)
);
insert into `products` (`Id`, `Name`) values(1,'LORFAST TAB.');
insert into `products` (`Id`, `Name`) values(1,'SPORIDEX REDIMIX DROP');
insert into `products` (`Id`, `Name`) values(1,'MICROGEST 400MG');
insert into `products` (`Id`, `Name`) values(1,'ANTIPLAR PLUS TAB');
insert into `products` (`Id`, `Name`) values(1,'DECA DURABOLIN 100MG');
最佳答案
您可能会从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
关于mysql - 选择包含字符串中附近单词的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48398830/