MySQL提供標準的SQL模式匹配,以及一種基於象Unix實用程序如vi、grep和sed的擴展正則表達式模式匹配的格式前端
下圖是示例用到的數據表信息正則表達式
![](http://static.javashuo.com/static/loading.gif)
1、SQL模式
SQL的模式匹配容許你使用「_」匹配任何單個字符,而「%」匹配任意數目字符(包括零個字符)。在 MySQL中,SQL的模式缺省是忽略大小寫的。
注意在你使用SQL模式時,你不能使用=或!=;而使用LIKE或NOT LIKE比較操做符。
語法:SELECT 字段 FROM 表 WHERE 某字段 Like 條件
其中關於條件,SQL提供了兩種種匹配模式:
1. 百分號(%):示任意個或多個字符,可匹配任意類型和長度的字符。
示例1:SELECT * FROM character WHERE name LIKE ‘%孫%';即匹配e姓名爲「孫行者」,「行者孫,「行者孫」三行數據 示例2:SELECT * FROM character WHERE name LIke '%孫%' and name like '%行%'; 即匹配姓名爲「孫行者」,「行者孫,「行者孫」三行數據 示例3:SELECT * FROM character WHERE name LIke '%孫%行%‘;只能匹配姓名爲「孫行者」一行數據
注意示例2和示例3的區別
2.下劃線(_):表示任意單個字符。匹配單個任意字符,它經常使用來限制表達式的字符長度語句:(能夠表明一箇中文字符)
示例1:SELECT * FROM character WHERE name LIKE ‘_三_';即把姓名爲「唐三藏」的一行數據 示例2:SELECT * FROM character WHERE name LIKE ‘_三';即把姓名爲「唐三」一行數據
2、正則模式
由MySQL提供的模式匹配的其餘類型是使用擴展正則表達式。當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操做符(或RLIKE和NOT RLIKE,它們是同義詞),如下是正則表達式中經常使用的字符
1. 「.」匹配任何單個的字符(單字節字符)。一個字符類「[...]」匹配在方括號內的任何字符。
示例1::「[abc]」匹配「a」、「b」或「c」。爲了命名字符的一個範圍,使用一個「-」。「[a-z]」匹配任何小寫字母,而「[0-9]」匹配任何數字。
2. 「 * 」匹配零個或多個在它前面的東西。
示例:「x*」匹配任何數量的「x」字符,「[0-9]*」匹配的任何數量的數字,而「.*」匹配任何數量的任何東西。
3. 注意:正則表達式是區分大小寫的,可是若是你但願,你能使用一個字符類匹配兩種寫法。例如,「[aA]」匹配小寫或大寫的「a」而「[a-zA-Z]」匹配兩種寫法的任何字母。
4. 「^」匹配名字的開始
示例:姓名以「孫」開始的 SELECT * FROM role WHERE name REGEXP "^孫";;即匹配姓名爲「孫行者」,「孫悟空兩行數據
5. 使用「$」匹配名字的結尾
示例:示例:姓名以「孫」結尾的 SELECT * FROM role WHERE name REGEXP "孫$";;即匹配姓名爲「者行孫」,「行者孫」兩行數據
3、in查詢
叫in查詢不是很合理 ,更合理的說法是 :in其實和=相似,區別在於:=後面是一個值。in 後面能夠是多個值。
示例1:select * from role where name in("唐三");即匹配姓名爲「唐三」一行數據; 示例2:select * from role where name in("唐三","唐三藏");即匹配姓名爲「唐三」,「唐三藏」一行數據; 示例3:select * from role where name in("唐三","%行者%"),只匹配姓名爲「唐三」一行數據;即in查詢不支持模糊查詢,如示例4 示例4:select * from role where name in("%行者%"),無匹配結果
4、like contact模糊查詢
CONCAT(str1,str2,…) 函數返回結果爲鏈接參數產生的字符串。
示例1:select * from role where name like contact("%","三","%");即匹配姓名爲「唐三」,「唐三藏」兩行行數據;
like contact模糊查詢強大的地方在於能夠對傳進來的參數進行某查詢,好比經前端提交上的數據,賦值給參數name,則能夠select * from table where name like contact("%",${name},"%")