標籤:
轉載自: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中的模糊查詢