一、MySQL通配符模糊查询(%,_)
1.1.通配符的分类
1.“%”百分号通配符:表示任何字符出现任意次数(可以是0次)
2.“_”下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然也可以like "张__",多个"_",数量不限。
3.like操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;但如果like后面没出现通配符,则在SQL执行优化时将like默认为"="执行
1.2.通配符的使用
1.“%”通配符
--模糊匹配含有“嵩”字的数据
select * from table where name like '%嵩%';
--模糊匹配以“嵩”字结尾的数据
select * from table where name like '%嵩';
--模糊匹配以“嵩”字开头的数据
select * from table where name like '嵩%';
--模糊匹配含有“xxx网xxx车xxx”的数据,如“滴滴网约车司机端,网络约车平台”
select * from table where name like '%网%车%';
2.“_”通配符
--查询以“网”为结尾的,长度为三个字的数据,如:“链家网”
select * from app_info where appname like '__网'
注意:'%__网、__%网'等同于'%网'
--查询前三个字符为xx网,后面任意匹配,如:“城通网盘、模具网平台”
select * from app_info where appname like '__网%';
--模糊匹配含义“xx网x车xxx”的数据,如:“携程网约车客户端”
select * from app_info where appname like '__网_车%';
注意:%通配符可以匹配任意字符,但是不能匹配NULL,也就是说SELECT * FROM blog where title_name like '%';是匹配不到title_name为NULL的的记录。
1.3.技巧与建议
MySQL的通配符很有用,但是这种功能是有代价的:通配符搜索的处理一般要比其他搜索所花时间更长,消耗更多的内存等资源。
- 不要过度使用通配符,如果其他操作符能达到相同的目的,应该使用其他操作符
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。因为MySQL在where后面的执行顺序是从左往右执行的,如果把通配符置于搜索模式的开始处,搜索起来是最慢的(因为要对全库进行扫描)
- 仔细注意通配符的位置,如果放错位置,可能不会返回想要的数据。
1.4.数据中的“%”、“_”等符合和通配符冲突
使用escape关键字进行转义
如下:escape后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,一般就写成“/”;然后就像c语言中转义字符一样,例如'\n','\t',把这个字符写在需要转义的那个%号前就可以了
SELECT * from app_info where appName LIKE '%/_%' ESCAPE '/';
二、MySQL内置函数检索(locate,position,instr)
通过内置函数locate,position,instr进行匹配,相当于Java中的str.contains()方法,返回的是匹配内容在字符串中的位置,效率和可用性上都优于通配符匹配。
SELECT * from app_info where INSTR(`appName`, '%') > 0;
SELECT * from app_info where LOCATE('%', `appName`) > 0;
SELECT * from app_info where POSITION( '%' IN `appName`) > 0;
如上,三种内置函数默认都是:>0,所以下列>0可加可不加,加上可读性更好
注意:MySQL中的角标从左往右是从1开始的,不像java最左边第一位角标是0,因此在MySQL中角标为0时说明不存在。
MySQL模糊查询与正则表达式:通配符、内置函数及正则匹配详解

本文详细介绍了MySQL中通配符(%和_)的使用、LIKE操作符、以及locate(),position(),instr()内置函数的应用。同时对比了正则表达式的使用,包括regexp和rlike关键字,展示了如何利用正则表达式进行更灵活的匹配。
最低0.47元/天 解锁文章
1万+





