我正在尝试获取字符串中包含类似单词的记录。我知道在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/

10-11 03:31
查看更多