MySQL必知必會---通配符與正則表達式
為在搜索子句中使用通配符,必須使用like操作符。
註意:操作符何時不是操作符?答案是它在作為謂詞時。
- 百分號(%)通配符
%表示任何字符出現任意次數。
MariaDB [test]> select id,age,province
-> from user
-> where province like ‘天%‘
-> ;
+----+------+----------+
| id | age | province |
+----+------+----------+
| 3 | 56 | 天津 |
| 9 | 33 | 天津 |
+----+------+----------+
- 下劃線(_)通配符
下劃線_,只匹配單個字符而不是多個字符。
使用通配符的技巧:
1.不要過度使用通配符
2.在確實需要使用通配符時,不要用在搜索模式的開始處。影響效率
3.仔細註意通配符的位置
- 使用mysql 正則表達式
MariaDB [test]> select id,age,province
-> from user
-> where age regexp ‘2‘
-> ;
+----+------+----------+
| id | age | province |
+----+------+----------+
| 1 | 22 | 北京 |
| 10 | 27 | 湖南 |
| 11 | 29 | 北京 |
| 13 | 24 | 北京 |
+----+------+----------+
5 rows in set (0.00 sec)
5.進行OR匹配
MariaDB [test]> select id,age,province
-> from user
-> where age regexp ‘22|27‘;
+----+------+----------+
| id | age | province |
+----+------+----------+
| 10 | 27 | 湖南 |
+----+------+----------+
2 rows in set (0.03 sec)
6.匹配幾個字符之一
MariaDB [test]> select id,age,province
-> from user
-> where age regexp ‘[123]7‘;
+----+------+----------+
| id | age | province |
+----+------+----------+
| 8 | 17 | 河北 |
| 10 | 27 | 湖南 |
+----+------+----------+
2 rows in set (0.00 sec)
7.匹配範圍
MariaDB [test]> select id,age,province
-> from user
-> where age regexp ‘[1-3]7‘;
+----+------+----------+
| id | age | province |
+----+------+----------+
| 8 | 17 | 河北 |
| 10 | 27 | 湖南 |
+----+------+----------+
2 rows in set (0.00 sec)
8.匹配特殊字符
註意:特殊字符處理時需進行轉義 escaping
\f 換頁
\n 換行
\r 回車
\t 制表
\v 縱向制表
匹配(\)為了匹配反斜杠字符本身,需要使用\
9.匹配字符類
[:alnum:] 任意字母和數字
[:alpha:] 任意字符
[:blank:] 空格和制表
[:cntrl:] ASCII 控制字符
[:digit:] 任意數字
[:graph:] 與[:print:]相同,但不包括空格
[:lower:] 任意小寫字母
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:] 又不在 [:cntrl:] 中的任意字符
[:space:] 包括空格在內的任意空白字符
[:upper:] 任意大寫字母
[:xdigit:] 任意十六進制數字
10.匹配多個實例
- 0個或多個匹配
- 1個或多個匹配
? 0個或一個匹配
{n} 指定數目的匹配
{n,} 不少於指定數目的匹配
{n,m} 範圍匹配
11.定位符
^ 文本開始
$ 文本末尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
MySQL必知必會---通配符與正則表達式