mysql 判断是否包含某字符串的5种方式
1.情景展示
在MySQL中,如何判断某字段是否包含指定字符串?
2.使用关键字:like
like也就是模糊查询,实现对字符串的某种特征信息的模糊查找。它其实依赖于以下2个特殊的"符号":
%:它代表任意个数的任意字符
_:它代表任意一个字符
使用方式,通常有6种变形;
变形一:like '字符串'+ '%'
相当于java当中的startwith()方法,表示的含义是:以指定字符串开头。
变形二:like + '%' + '字符串'
相当于java当中的endwith()方法,表示的含义是:以指定字符串结尾。
变形三:like + '%' + '字符串'+ '%'
相当于java当中的contains()方法,表示的含义是:包含指定字符串。
变形四: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 '%字符串%'不走索引的解决方案,见文末推荐。
2022年2月17日15:35:51
当我们使用like CONCAT('%', '','%')时,如果中间的字符串为空,查询的将是所有数据。
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')
2024-05-23 10:02:55
7.拓展
模糊查询,计算某字符在字符串中的位置并按出现的位置进行排序。
SELECT *, LOCATE('a', my_column) AS position
FROM my_table
WHERE my_column LIKE '%a%'
ORDER BY position;
说明:
like '%a' 将导致全表扫描。
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15866191.html