一、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