mysql模糊查詢


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




免責聲明!

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



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