1.情景展示
在MySQL中,如何判断某字段是否包含指定字符串?
2.使用关键字:like
like也就是模糊查询,实现对字符串的某种特征信息的模糊查找。它其实依赖于以下2个特殊的"符号":
%:它代表任意个数的任意字符
_:它代表任意一个字符
使用方式,通常有6种变形;
变形一:like '字符串'+ '%'
相当于java当中的startwith()地方,表示的含义是:以指定字符串开头;
变形二:like + '%' + '字符串'
相当于java当中的endwith()地方,表示的含义是:以指定字符串结尾;
变形三:like + '%' + '字符串'+ '%'
变形四:like + '_' + '字符串'
变形五:like + '字符串' + '_'
变形六:like + '_' + '字符串' + '_'
再者,就是'%'和'_'同时使用的情况了,不再赘述。
如果觉得全表查询速度太慢,可以对要查询的字段建立索引。
另外,如果要查询字段当中包含'%'或者'_'的话,在其前面加上转义符'\'即可。
-- 查询ORGNAME为'_阳X'的数据
select t.ORGNAME FROM base_org_info_copy1 t WHERE t.ORGNAME LIKE '\_阳_';
-- 查询ORGNAME包含'%阳'的数据
select t.ORGNAME FROM base_org_info_copy1 t WHERE t.ORGNAME LIKE '%\%阳%';
关于like '%字符串'和like '%字符串%'不走索引的解决方案,见文末推荐。
3.locate() 推荐使用
LOCATE(substr,str):判断是否包含某字符串,如果包含将返回>0的数值,否则,返回0;
常见的用法有两种:
方式一:筛选出包含指定字符串的数据;
select t.ORGNAME FROM base_org_info_copy1 t WHERE LOCATE('阳',t.ORGNAME) LIMIT 1;
方式二:筛选出不包含指定字符串的数据;
select t.ORGNAME FROM base_org_info_copy1 t WHERE LOCATE('阳',t.ORGNAME)=0 LIMIT 1;
LOCATE(substr,str,pos)
表示的是:返回在pos位置之后,substr在str中出现的位置。若substr在str的pos位置之后没有出现,则返回0。
4.POSITION()
POSITION(substr IN str)的用法与locate() 一模一样。
5.instr()
INSTR(str,substr)与position(substr IN str)和LOCATE(substr,str)用法一样,只不过是:顺序不同;
instr(),是将被包含的字符串放在第2个参数当中。
6.find_in_set()
FIND_IN_SET(str,strlist)
第一个参数:表示要查找的字符串;
第二个参数:字符串集合,以需要以逗号隔开。
该函数的含义是:查找字符串在集合当中的位置;如果存在,就返回所在位置的数值;不存在,就返回0。
说明:忽略大小写;
这个函数,一般情况下没有使用的必要。
select FIND_IN_SET('Marydon','123,321,MARYDON')
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!