字段table
。name
包含'Stylus Photo 2100'并包含以下查询
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%'
我没有结果。我当然会搜索
SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%'
如何通过搜索“Stylus 2100”来选择记录?
谢谢
答案 0 :(得分:96)
如果你知道你的话的顺序......你可以使用:
SELECT `name` FROM `table` WHERE `name` REGEXP 'Stylus.+2100'
您也可以使用:
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%' AND `name` LIKE '%2100%'
答案 1 :(得分:28)
我认为最好的解决方案是使用正则表达式。它是最干净的,可能是最有效的。所有常用的数据库引擎都支持正则表达式。
在MySql中有RLIKE
运算符,因此您的查询类似于:
<删除> SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus|2100'
德尔>
我在正则表达式方面不是很强,所以我希望表达式没问题。
修改强>
RegExp应该是:
SELECT * FROM buckets WHERE bucketname RLIKE '(?=.*Stylus)(?=.*2100)'
更多关于MySql正则表达式的支持:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
答案 2 :(得分:18)
您可以使用%
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus%2100%'
答案 3 :(得分: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)+.*';
但这也符合&#34; 210021002100&#34;这不是很好。
答案 4 :(得分:3)
查看http://www.techonthenet.com/sql/like.php
用LIKE'%Stylus 2100%'你问一个包含'Stylus 2100'的字符串,'Stylus Photo 2100'不包含那个字符串,里面有'Photo';
答案 5 :(得分:1)
您需要执行以下操作
SELECT * FROM buckets WHERE bucketname RLIKE 'Stylus.*2100';
或
SELECT * FROM buckets WHERE bucketname RLIKE '(Stylus)+.*(2100)+';
答案 6 :(得分:0)
假设您的搜索是stylus photo 2100
。尝试使用RLIKE
的以下示例。
SELECT * FROM `buckets` WHERE `bucketname` RLIKE REPLACE('stylus photo 2100', ' ', '+.*');
编辑
另一种方法是在FULLTEXT
语句中对bucketname
和MATCH ... AGAINST
语法使用SELECT
索引。所以要重写上面的例子...
SELECT * FROM `buckets` WHERE MATCH(`bucketname`) AGAINST (REPLACE('stylus photo 2100', ' ', ','));
答案 7 :(得分:0)
从name
的{{1}}中选择table
,例如'%Stylus%2100%'