MySQL SELECT LIKE或REGEXP在一个logging中匹配多个单词
字段table
。 name
包含“Stylus Photo 2100”和以下查询
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%'
我没有得到任何结果。 当然,如果我search,我会
SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%'
如何通过search“Stylus 2100”来selectlogging?
谢谢
那么如果你知道你的话的顺序..你可以使用:
SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100'
你也可以使用:
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%'
我认为最好的解决scheme是使用正则expression式。 这是最干净的,可能是最有效的。 所有常用的数据库引擎都支持正则expression式。
在MySql中有RLIKE
运算符,所以你的查询将是这样的: SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
在正则expression式中我不是很强,所以我希望expression式可以。
编辑
RegExp应该是:
SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)'
更多关于MySql正则expression式的支持:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
你可以用%
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%'
看看http://www.techonthenet.com/sql/like.php
与“%Stylus 2100%”一样,您要求一个包含“Stylus 2100”的string,而“Stylus Photo 2100”不包含该string,里面有“照片”;
正确的解决scheme是全文search(如果您可以使用它) 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)+.*';
但是这也会匹配不太好的“210021002100”。