Mysql 使用通配符(%,_,[ ],[^])进行多条件模糊查询(like,regexp)
(一)SQL通配符:
通配符 | 说明 |
---|---|
% | 与包含0个或多个字符串匹配 |
_ | 与任意单个字符匹配 |
[ ] | 与特定范围(例如[a-d]或特定集例如[abcdef])中的任意字符串匹配 |
[^] | 与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。 |
举例:
%:
1、查找字段“db_name”中以“Ch”结尾的所有数据。
select * from monitor_db_conf WHERE db_name LIKE "%Ch"
2、查找字段“db_name”中以“Ch”开头的所有数据。
select * from monitor_db_conf WHERE db_name LIKE "Ch%"
3、查找字段“db_name”中包含"Ch"的所有数据,包含开头、结尾。
select * from monitor_db_conf WHERE db_name LIKE "%Ch%"
_ 下划线,可以表示为数字、中文、英文
查找字段“db_name”中符合以“heryl”结尾,首字母为任意字符。
select * from monitor_db_conf WHERE db_name LIKE "_heryl"
[ ] ,注意该通配符与关键字REGEXP
搭配使用。
1、查找首字母为A到D,后缀为“heryl”的数据,如:Cheryl、Aheryl
select * from monitor_db_conf WHERE db_name REGEXP '[A-D]heryl'
2、查找首字母为C或S,后缀为“heryl”的数据。
select * from monitor_db_conf WHERE db_name REGEXP '[CS]heryl'
[^],与上面的用法相反,与关键字REGEXP
搭配使用。
匹配首字母除“S”以外,后缀为“heryl”的数据。
select * from monitor_db_conf WHERE db_name REGEXP '[^S]heryl'
注意事项:
注意大小写,在使用模糊匹配时,也就是匹配文本时,mysql是可能区分大小的,也可能是不区分大小写的,这个结果是取决于用户对MySQL的配置方式.如果是区分大小写,那么像YvesHe这样记录是不能被"yves__"这样的匹配条件匹配的.
注意尾部空格,"%yves"是不能匹配"heyves "这样的记录的.
注意NULL,%通配符可以匹配任意字符,但是不能匹配NULL,也就是说SELECT * FROM products WHERE products.prod_name like ‘%’;是匹配不到products.prod_name为NULL的的记录.
技巧与建议:
正如所见, MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。这里给出一些使用通配符要记住的技巧。
不要过度使用通配符。如果其他操作符能达到相同的目的,应该 使用其他操作符。
在确实需要使用通配符时,除非绝对有必要,否则不要把它们用 在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起 来是最慢的。
仔细注意通配符的位置。如果放错地方,可能不会返回想要的数.
(二)模糊查询多个字段方法
CONCAT
,连接多个字段值,用法:CONCAT(str1,str2,...)
模糊匹配字段“db_name”和"wind_field_name",注意:如果查找字段中某个字段为null,则无法获取该条数据。
select * from monitor_db_conf WHERE CONCAT(wind_field_name,db_name) LIKE "%yl"
查询结果如下:
CONCAT_WS
,连接多个字段值,用分隔符分开。用法:CONCAT_WS(separator,str1,str2,...)
select * from monitor_db_conf WHERE CONCAT_WS("-",wind_field_name,db_name) LIKE "%yl"
查询结果如下:
参考文章:
https://blog.csdn.net/u011479200/article/details/78513632
https://blog.csdn.net/The_Best_Hacker/article/details/108196388
下一篇: sql:mysql:列转行