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' 将导致全表扫描。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-02-06 19:24  Marydon  阅读(31781)  评论(0编辑  收藏  举报