1. field like str
2. field regex pattern
3. LOCATE('substr',str,pos)
4. POSITION('substr' IN `field`)方法
5. INSTR(`str`,'substr')方法
6. FIND_IN_SET(str1,str2):
1. like
SELECT 字段 FROM 表 WHERE 某字段 Like 條件
其中關於條件,SQL提供了四種匹配模式:
1) % :表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。
2) _ : 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
3) like可以利用字符串前綴索引
參見:https://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html
2. REGEXP正則表達式
如果要區分大小寫,應該使用BINARY關鍵字,如where xxx REGEXP BINARY 'Hello.000'
SELECT column_list FROM table_name WHERE string_column REGEXP pattern
下表說明了正則表達式中一些常用的元字符和構造。
^ | 匹配搜索字符串開頭處的位置 |
$ | 匹配搜索字符串末尾的位置 |
. | 匹配任何單個字符 |
[…] | 匹配方括號內的任何字符 |
[^…] | 匹配方括號內未指定的任何字符 |
匹配p1或p2模式 | 匹配p1或p2模式 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前一個字符一次或多次 |
{n} | 匹配前幾個字符的n個實例 |
{m,n} | 從m到n個前一個字符的實例匹配 |
舉例:
查詢名字中包含100或200的名字:SELECT * FROM my_user WHERE `name` REGEXP '100|200';
查詢以“韓”字開頭的名字:select * from my_user where name regex '^韓'
為了匹配\本身,需要使用\\\。在一般情況下正則表達式的轉義加一個“\”就可以了,在MySQL中需要加兩個。
^有兩個用法,一個是非,一個是文本的開始,用[]中表示非,否則是文本的開始。
參見:https://www.yiibai.com/mysql/regular-expression-regexp.html
https://www.cnblogs.com/hider/p/9121704.html
3. LOCATE('substr',str,pos)方法
返回 substr 在 str 中第一次出現的位置,如果 substr 在 str 中不存在,返回值為 0 。如果pos存在,返回 substr 在 str 第pos個位置后第一次出現的位置,如果 substr 在 str 中不存在,返回值為0。
SELECT LOCATE('xbar',`foobar`); ###返回0
4. POSITION('substr' IN `field`)方法
position可以看做是locate的別名,功能跟locate一樣
5. INSTR(`str`,'substr')方法
SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0
6. FIND_IN_SET(str1,str2):
返回str2中str1所在的位置索引,其中str2必須以","分割開。(字段內容必須以“,”隔開才能匹配)
SELECT * FROM `person` WHERE FIND_IN_SET('apply',`name`);
結果:
參見:https://www.cnblogs.com/chaobest/p/6737901.html