mysql 判斷是否包含某字符串的3種方式


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')

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM