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')
寫在最后
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!