天天看點

mysql 電話模糊查詢_mysql中的模糊查詢

轉載自: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\%%’;

SELECT * FROM table_name WHERE column_name LIKE ‘%50/%%’ ESCAPE ‘/’; #第2個%被轉義

SELECT * FROM table_name WHERE column_name LIKE ‘%\_get%’ ESCAPE ‘/’;

第二種是使用擴充正規表達式的模式比對。先來看下擴充正規表達式一些字元的含義:

“.”:比對任意單個字元

“?”:比對前面的子表達式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}’;