MySQL中實現(xiàn)模糊查詢有2種方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它們是同義詞)。
第一種是標準的SQL模式匹配。它有2種通配符:“_”和“%”。“_”匹配任意單個字符,而“%”匹配任意多個字符(包括0個)。舉例如下:
SELECT * FROM table_name WHEREcolumn_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。答案就是:轉義??梢?b>用來直接轉義,或用ESCAPE定義轉義字符來進行轉義,都只是轉義跟在后面的一個字符,例如:
SELECT * FROM table_name WHEREcolumn_name LIKE ‘P%%’;
SELECT * FROM table_name WHERE column_name LIKE ‘P/%%’ 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 WHEREcolumn_name REGEXP ‘^50%{1,3}’;
正則匹配這東東還是挺有用處的,感興趣的童鞋可以慢慢體會深入研究,O(∩_∩)O~
來源:http://www.letuknowit.com/archives/90
愛華網


