通配符
|
说明
|
%
|
与包含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的配置方式.如果是区分大小写,那么像Cheryl这样记录是不能被"chery_"这样的匹配条件匹配的.
注意尾部空格,"%eryl"是不能匹配"Cheryl "这样的记录的.
注意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
_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:
2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题
(1)尽量少以%或者_开头进行模糊查询
通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的
以%或者_开头查询,索引失效
(2)使用覆盖索引
当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊
众所周知,SQL语句中的like模糊查询 select * from table where name like‘%张蛋%’,
但实际开发中经常用到 select * from table where name like concat(#{name},'%')
比如根据用户名或手机号模糊查找用户
(us.nick_name LIKE CONCAT('%',#{keyWord},'%'...
很多网友问到如何写模糊查询语句和多条件查询,这里我整理了一下,假设以姓名、性别、电话号...作为数据库中的字段名。通常写一个简单的模糊查询的SQL语句格式可以如下例:sql="select*from表名where字段名like’%"&request.form("请求变量")&"%’"说明:1、WHERE关键词的后面跟着用来过滤数据的条件,百分号%是通配符,...
SELECTBigCategory,SmallCategory,Model_No,1'yuefen',SUM(casewhenBizType='P'thenMONTH1Numend)asP,SUM(casewhenBizType='S'thenMONTH1Numend)asS,SUM(casewhenBizType='I'thenMONT...SELECT BigCategory,SmallCat...
1. like最基本的实现模糊匹配的语句,但一次只能匹配一种候选模式(like "%content%"),若要对多个候选进行模糊匹配,则需要写多次like,然后以or连接,但是当候选数目过多时,则该种方式明显不适用;2.REGEXP_LIKE与like的作用类似,以正则的方式进行匹配,支持多条件同时查询;select col from table t where REGEXP_LIKE(t.col...
一.使用LIKE和通配符 _
场景1:我要搜索一个名字是3个字符的,可我都忘记叫什么了,那怎么搜索呢
SELECT * FROM test WHERE name LIKE'___';
(没错,一个下划线**_*对应一个字符)
场景2:我要搜索一个名字总共是3个字符的,可是我只记得第一个字符是 c 后面忘记/了,那怎么搜索呢
SELECT * FROM test WHE
在后台的项目中,会经常遇到,就是信息的查找,这里就举个简单的例子,如搜索某一个产品的信息,在一个表里面有多个字段,而搜索的内容可能是其中的某个字段,这样只有多字段查询才能实现。MySQL多字段模糊查询:指在表单中对多字段进行多个关键字的模糊查询,而这个关键字在所有字段里面的其中之一(也可以关联多表查询)。例如:表product里面有四个字段 id、name、title、description 产...
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了四种匹配模式:
1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
SELECT * FROM [user] WHERE u_name LIKE '%三%'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_nam
mysql用多个查询结果进行模糊匹配,类似like匹配多个查询结果。
like子句方便做对单个值的匹配,如果要对一个查询结果集都在一个查询语句里匹配,可以用mysql的正则表达式搭配group_concat函数做到。
先看数据表:
目标是在user表中,匹配出姓氏在family_info表中的记录。
使用group_concat函数来生成任意字符串左匹配的正则表达式字符串:
select group_concat(concat('^',fi.family_name) SEPARATOR '|') fr
- 如果关键字匹配上商品,则展示该商品以及店家信息,
- 如果关键字匹配不上商品,匹配上店家,则要查询排序在前面的一条商品数据,展示该数据和该店家的信息。
- 如果关键字匹配上店家和商品,则展示该商品及该店家的信息。...