mysql學習2:模糊匹配查詢like,regexp,in


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},"%")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM