我有一个表,它包含一个名为- DOC_NAME的VARCHAR列。我想查询这个列中的任何字符串匹配,部分匹配也被接受。
例如,该列包含:
“病毒和间谍软件如何附着在系统上- Techicode”
如果我搜索“病毒间谍软件”,我不会得到任何结果。我不想单独搜索每个单词,因为这可能会返回不相关的结果。此外,我想搜索‘关键字’,而不需要整个字符串。
我尝试了以下几种选择:
select * from docs where DOC_NAME like '%virus spyware%';
我也试过:
SELECT * FROM docs WHERE DOC_NAME LIKE CONCAT('%','virus spyware','%')但正如我所提到的,我没有任何结果。
我有一个查询,我可以用它返回一个值?
提前谢谢。
发布于 2014-11-11 21:46:04
select * from docs where DOC_NAME like '%virus%spyware%'或者,如果订单不重要,而且只需要匹配一个:
select * from docs where DOC_NAME like '%virus%' or DOC_NAME like '%spyware%'如果所有关键字必须匹配,则使用AND而不是OR。
发布于 2014-11-11 21:49:29
在MySQL中有多个实现全文搜索的选项。本机方法是添加一个全文索引,然后可以使用它来运行搜索,如您的示例所示:
alter table docs
add fulltext index doc_name_fti (doc_name);
select *
from docs
where match(doc_name) against ('+virus +spyware' in boolean mode);还有一些产品,如狮身人面像和索尔,您可以使用。
发布于 2014-11-11 21:50:13
SELECT doc_name FROM docs WHERE doc_name RLIKE '.*virus*spyware'
我发现类似的语法不像PCRE那么熟悉。
然而,这可能更有表现力。
SELECT FIELD('virus', doc_name) or FIELD('spyware', doc_name) from docs
https://stackoverflow.com/questions/26875108
复制相似问题