MySQL學習筆記:like和regexp的區別


一、like關鍵字

  like有兩個模式:_和%

  • _:表示單個字符,用來查詢定長的數據
select name from table where name like '陳__';
  • %:表示0個或多個任意字符
select name from table where name like '陳%'; select name from table where name like '%宏%';

 

二、regexp關鍵字

  1.基本字符匹配

select * from table where col regexp '.000';

  2.like匹配整個值 通配符%

  3.regexp可使用正則自由定制 定位符號^$
  4.如果要區分大小寫,應該使用BINARY關鍵字,如where xxx REGEXP BINARY 'Hello.000'
  5.使用|實現or效果

select * from table where col regexp '1000|2000';

  6.匹配幾個字符之一,用[和]擴起來

select * from table where col regexp '[abcde]';

  7.匹配范圍:[0-9] [A-Z] [a-z]

  • [^0-9] ^表示非,即匹配不是0-9
  • 后面的比前面大
select * from table where col regexp '[0-9]Ton';

  8.匹配特殊字符使用\\進行轉義

  • \\.能夠匹配.
  • \\f換頁
  • \\n換行
  • \\r回車
  • \\t制表
  • \\縱向制表

注意:
  a)為了匹配\本身,需要使用\\\
  b)在一般情況下正則表達式的轉義加一個“\”就可以了,在MySQL中需要加兩個。


  9.匹配字符類(Posix字符類)

  

  使用的時候需要外面加一層[],例如[[:digit:]]

select * from table where col regexp 'name[[:digit:]]';

  10.匹配多個實例

  • * 0或多個
  • + 1或多個
  • ? 0或1個
  • {n} 指定n個
  • {n,} 不少於n個
  • {n,m} n-m個
select * from table where col regexp '[0-9]{1,3}';

  11.定位符

  • ^ 開始
  • $ 結尾
  • [[:<:]] 詞的開始
  • [[:>:]] 詞的結尾

  12.^有兩個用法,一個是非,一個是文本的開始,用[]中表示非,否則是文本的開始。
  13.MySQL的正則比較簡化,沒有惰性匹配/貪婪匹配,[]內不支持\w\s\d這種語法,也不支持中文。
  14.這兩種模式不要混着用,like模式是不支持正則表達式的,REGEXP模式也不認識_和%。
  15.注意:regexp == rlike 同義詞  not like  not regexp
  16.in不支持模糊查詢,如:

select * from table where name in ('%宏%');

  17.like concat('%',name,'%')作用在於name為變量,在傳參的時候方便。


END 2018-06-01 15:00:02


免責聲明!

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



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