mysql中的模糊查詢

來源:互聯網
上載者:User

標籤:

轉載自:http://www.letuknowit.com/archives/90/

  MySQL中實現模糊查詢有2種方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它們是同義字)。
  第一種是標準的SQL模式比對。它有2種萬用字元:“_”和“%”。“_”匹配任意單個字元,而“%”匹配任意多個字元(包括0個)。舉例如下:

SELECT * FROM table_name WHERE column_name LIKE ‘m%’; #查詢某欄位中以m或M開頭的所有記錄
SELECT * FROM table_name WHERE column_name LIKE ‘%m%’; #查詢某欄位中包含m或M的所有記錄
SELECT * FROM table_name WHERE column_name LIKE ‘%m’; #查詢某欄位中以m或M結尾的所有記錄
SELECT * FROM table_name WHERE column_name LIKE ‘_m_’; #查詢某欄位中3個字元且m或M在中間的所有記錄

  如果我們想查詢包含萬用字元的字串該怎麼辦呢?比如,50%或_get。答案就是:轉義。可以用\來直接轉義,或用ESCAPE定義逸出字元來進行轉義,都只是轉義跟在後面的一個字元,例如:

SELECT * FROM table_name WHERE column_name LIKE ‘%50\%%’; /*第2個%被轉義,查詢某欄位包含50%的所有記錄*/
SELECT * FROM table_name WHERE column_name LIKE ‘%50/%%’ ESCAPE ‘/’; #第2個%被轉義
SELECT * FROM table_name WHERE column_name LIKE ‘%\_get%’ ESCAPE ‘/’; /*“_”被轉義,查詢某欄位包含_get的所有記錄*/

  第二種是使用擴充Regex的模式比對。先來看下擴充Regex一些字元的含義:
“.”:匹配任意單個字元
“?”:匹配前面的子運算式0次或1次。
“+”:匹配前面的子運算式1次或多次。
“*”:匹配前面的子運算式0次或多次。x*,表示0個或多個x字元;[0-9]*,匹配任何數量的數字。
“^”:表示匹配開始位置。
“$”:表示匹配結束位置。
“[]”:表示一個集合。[hi],表示匹配h或i;[a-d],表示匹配a、b、c、d中任一個。
“{}”:表示重複的次數。8{5},表示匹配5個8,即88888;[0-9]{5,11},表示匹配5到11個數字。
  再來看個例子:

SELECT * FROM table_name WHERE column_name REGEXP ‘^50%{1,3}’; /*查詢某欄位中以50%、50%%或50%%%開頭的所有記錄*/

mysql中的模糊查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.