我有一个包含名为DOC_NAME的VARCHAR列的表。 我想查询此列是否有任何字符串匹配,也接受部分匹配。
例如,该列包含:
“病毒和间谍软件在系统上的危险程度 - Techicode”
如果我搜索“病毒间谍软件”,我就没有结果。 我不想单独搜索每个单词,因为这可能会返回不相关的结果。 另外,我想搜索“关键字”而不是整个字符串。
我尝试过以下选项:
select * from docs where DOC_NAME like '%virus spyware%';
我也试过了:
SELECT * FROM docs WHERE DOC_NAME LIKE CONCAT('%','virus spyware','%')
但正如我所提到的,我没有任何结果。
我有一个可以使用的查询会返回一个值吗?
提前致谢。
答案 0 :(得分:6)
select * from docs where DOC_NAME like '%virus%spyware%'
或者如果订单没有关系,只需要匹配:
select * from docs where DOC_NAME like '%virus%' or DOC_NAME like '%spyware%'
如果所有关键字都匹配使用AND
而不是OR
。
答案 1 :(得分:4)
在MySQL中实现全文搜索有多种选择。原生方式是添加fulltext index,然后可以使用它来运行搜索,例如:
alter table docs
add fulltext index doc_name_fti (doc_name);
select *
from docs
where match(doc_name) against ('+virus +spyware' in boolean mode);
答案 2 :(得分:0)
SELECT doc_name FROM docs WHERE doc_name RLIKE '.*virus*spyware'
我发现LIKE语法不如PCRE熟悉。
然而,这可能是更高效的
SELECT FIELD('virus', doc_name) or FIELD('spyware', doc_name) from docs
答案 3 :(得分:0)
全文索引是实现这一目标的最佳方式。如果由于某种原因你不能并且必须使用LIKE
,那么对于所有术语搜索:
select * from docs where DOC_NAME like '%virus%' and DOC_NAME like '%spyware%';
对于任何条款搜索:
select * from docs where DOC_NAME like '%virus%' or DOC_NAME like '%spyware%';