mysql模糊匹配查詢like,regexp,in
摘要
內容比較簡單,無摘要。
關鍵詞
模糊查詢 like regexp in contact
正文
下圖是示例用到的數據表信息

MySQL提供標准的SQL模式匹配,以及一種基於象Unix實用程序如vi、grep和sed的擴展正則表達式模式匹配的格式
一、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 ‘_三';即把姓名為“唐三”一行數據
二、正則模式
由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 "孫$";;即匹配姓名為“者行孫”,“行者孫”兩行數據
三、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("%行者%"),無匹配結果
四、like contact模糊查詢
CONCAT(str1,str2,…) 函數返回結果為連接參數產生的字符串。
示例1:select * from role where name like contact("%","三","%");即匹配姓名為“唐三”,“唐三藏”兩行行數據;
like contact模糊查詢強大的地方在於可以對傳進來的參數進行某查詢,比如經前端提交上的數據,賦值給參數name,則可以select * from table where name like contact("%",${name},"%")