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)
正确的解决方案是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"并不是很好.