[英]In MySQL how to write SQL to search for words in a field?
create table tbl (
id int,
comment varchar(255),
primary key (id)
);
insert into tbl (id, comment) values ('1', 'dumb,');
insert into tbl (id, comment) values ('2', 'duuumb,');
insert into tbl (id, comment) values ('3', 'dummb');
insert into tbl (id, comment) values ('4', 'duummb');
insert into tbl (id, comment) values ('5', 'very dumb person');
select comment, soundex(comment)
from tbl;
结果:
+------------------+------------------+
| comment | soundex(comment) |
+------------------+------------------+
| dumb, | D510 |
| duuumb, | D510 |
| dummb | D510 |
| duummb | D510 |
| very dumb person | V6351625 |
+------------------+------------------+
我想在字段中的任何地方找到所有包含“哑”的行,包括所有错字和变化。
select comment
from tbl
where soundex(comment) like '%D510%'
这无法获得最后的第5行,我又如何获得该行? 如果有比soundex()更好的解决方案,那就没问题了。
这将适用于您的特定示例:
select comment
from tbl
where soundex(comment) like '%D510%' or comment like '%dumb%';
它不会在评论中发现拼写错误。
编辑:
您可以执行以下操作:
select comment
from tbl
where soundex(comment) = soundex('dumb') or
soundex(substring_index(substring_index(comment, ' ', 2), -1) = soundex('dumb') or
soundex(substring_index(substring_index(comment, ' ', 3), -1) = soundex('dumb') or
soundex(substring_index(substring_index(comment, ' ', 4), -1) = soundex('dumb') or
soundex(substring_index(substring_index(comment, ' ', 5), -1) = soundex('dumb');
有点蛮力。
需要这样做建议您应该考虑全文索引。
您可以尝试使用MySQL REGEXP吗? 是在文本中查找特定单词的好方法。
您可以使用[[:<:]]和[[:>:]]作为单词边界:
SELECT comment FROM tbl WHERE comment REGEXP '[[:<:]]dumb[[:>:]]'
假设您需要整个字段,而不仅仅是匹配的元素,那么这应该起作用,因为soundex永远不会在另一个元素的中间找到一个元素。
选择来自tbl的评论,其中(soundex(comment)如'%D510%'或'%d%mb'之类的评论)
编辑已更改,例如对于U是其他东西的情况,即Damb,其声音为D510
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.