MySQL SELECT LIKE或REGEXP匹配一条记录中的多个单词

Ale*_*nze 66 regex mysql select sql-like

这个领域table.name包含'Stylus Photo 2100'并具有以下查询

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%'
Run Code Online (Sandbox Code Playgroud)

我没有结果.当然,如果我搜索,我会的

SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%'
Run Code Online (Sandbox Code Playgroud)

如何通过搜索"Stylus 2100"来选择记录?

谢谢

SER*_*PRO 107

好吧,如果你知道你的话的顺序..你可以使用:

SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100'
Run Code Online (Sandbox Code Playgroud)

你也可以使用:

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%'
Run Code Online (Sandbox Code Playgroud)


Ond*_*zek 28

我认为最好的解决方案是使用正则表达式.它是最干净的,可能是最有效的.所有常用的数据库引擎都支持正则表达式.

在MySql中有RLIKE运算符,所以你的查询将是这样的:
SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
我在正则表达式方面不是很强,所以我希望表达式没问题.

编辑
RegExp应该是:

SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)'
Run Code Online (Sandbox Code Playgroud)

有关MySql regexp支持的更多信息:http:
//dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp


Mel*_*cio 18

你可以用它来替换每个空间 %

SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%'
Run Code Online (Sandbox Code Playgroud)

  • 哈哈!好吧,问题“如何通过搜索‘Stylus 2100’来选择记录?”中没有指定该要求。 (2认同)

Mar*_*tin 5

正确的解决方案是FullText搜索(如果您可以使用它)https://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

这几乎可以满足您的需求:

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100)+.*(Stylus|2100)+';

SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*(Stylus|2100|photo)+.*';
Run Code Online (Sandbox Code Playgroud)

但这也将匹配"210021002100"并不是很好.