正则表达式查询MySQL数据

注:使用正则表达式的关键字是REGEXP

1、查询以特定字符或字符串开头的记录

字符“^”匹配特定字符或者字符串开头的文本

#在fruits表中,查询f_name字段以字母b开头的记录
MariaDB [vincen]> select * from fruits
    -> where 
    -> f_name REGEXP '^b'
    -> ;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| t1   |  102 | banana     |   10.30 |
+------+------+------------+---------+
3 rows in set (0.01 sec)

2、查询以特定字符或字符串结尾的记录

字符“$”匹配特定字符或者字符串结尾的文本

#在fruits表中,查询f_name字段以y结尾的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'y$'
    -> ;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| c0   |  101 | cherry     |    3.20 |
| m2   |  105 | xbabay     |    2.60 |
+------+------+------------+---------+
4 rows in set (0.00 sec)

3、代替字符中的任意一个字符串

字符“.”匹配任意一个字符

#在fruits表中查询f_name字段值包含字母a与g且两个字母之间只有一个字母的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'a.g'
    -> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| bs1  |  102 | orange |   11.20 |
| m1   |  106 | mango  |   15.60 |
+------+------+--------+---------+
2 rows in set (0.01 sec)

4、匹配多个字符

*”匹配前面的字符任意多次,包括0次

#在fruits表中查询f_name字段以字母b开头,且b后面出现字母a的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP '^ba*'
    -> ;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| t1   |  102 | banana     |   10.30 |
+------+------+------------+---------+
3 rows in set (0.01 sec)

+”匹配前面的字符至少一次 

#在fruits表中查询f_name字段以b开头且b后面出现a至少一次的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP '^ba+'
    -> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| t1   |  102 | banana |   10.30 |
+------+------+--------+---------+
1 row in set (0.00 sec)

5、匹配指定字符串

如果要匹配指定单个字符,则直接将该字符写在单引号里就可以了

如果要匹配指定多个字符,则要用“|”符号隔开(在linux 里称为管道符)

#在fruits表中查询字段f_name中带有on字符的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'on'
    -> ;
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| bs2  |  105 | melon   |    8.20 |
| l2   |  104 | lemon   |    6.40 |
| o2   |  103 | coconut |    9.20 |
+------+------+---------+---------+
3 rows in set (0.00 sec)
#查询fruits表中字段f_name带有on或者ap的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'on|ap'
    -> ;
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| a1   |  101 | apple   |    5.20 |
| a2   |  103 | apricot |    2.20 |
| bs2  |  105 | melon   |    8.20 |
| l2   |  104 | lemon   |    6.40 |
| o2   |  103 | coconut |    9.20 |
| t2   |  102 | grape   |    5.30 |
+------+------+---------+---------+
6 rows in set (0.01 sec)

6、匹配指定字符中的任意一个

方括号[]指定一个字符集合、数值集合

#在fruits表中查询字段f_name中包含字母o或者b的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP '[ob]'
    -> ;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.60 |
| m2   |  105 | xbabay     |    2.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
11 rows in set (0.01 sec)
#在fruits表中查询s_id字段中带有3或者4或者5或者6的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> s_id REGEXP '[3456]'
    -> ;
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| a2   |  103 | apricot |    2.20 |
| b2   |  104 | berry   |    7.60 |
| bs2  |  105 | melon   |    8.20 |
| l2   |  104 | lemon   |    6.40 |
| m1   |  106 | mango   |   15.60 |
| m2   |  105 | xbabay  |    2.60 |
| m3   |  105 | xxtt    |   11.60 |
| o2   |  103 | coconut |    9.20 |
+------+------+---------+---------+
8 rows in set (0.01 sec)

7、匹配指定字符以外的字符

[^字符集合] 匹配不在指定字符集合中的任何字符

#在fruits表中查询f_id字段包含字母a~e和数字1~2以外的字符记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_id REGEXP '[^a-e 1-2]'
    -> ;
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| b5   |  107 | xxxx    |    3.60 |
| bs1  |  102 | orange  |   11.20 |
| bs2  |  105 | melon   |    8.20 |
| c0   |  101 | cherry  |    3.20 |
| l2   |  104 | lemon   |    6.40 |
| m1   |  106 | mango   |   15.60 |
| m2   |  105 | xbabay  |    2.60 |
| m3   |  105 | xxtt    |   11.60 |
| o2   |  103 | coconut |    9.20 |
| t1   |  102 | banana  |   10.30 |
| t2   |  102 | grape   |    5.30 |
| t4   |  107 | xbababa |    3.60 |
+------+------+---------+---------+
12 rows in set (0.01 sec)

8、指定字符出现次数

字符{n,}”表示至少匹配n次前面的字符

#在fruits表中查询f_name字段中字母x至少出现2次的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'x{2,}'
    -> ;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b5   |  107 | xxxx   |    3.60 |
| m3   |  105 | xxtt   |   11.60 |
+------+------+--------+---------+
2 rows in set (0.01 sec)

字符{n,m}”表示匹配前面的字符串不少于n次,不多于m次。(n<=次数<=m) 

#在fruits表中查询f_name字段里字符串ba出现至少1次,最多3次的记录
MariaDB [vincen]> select * from fruits
    -> where
    -> f_name REGEXP 'ba{1,3}'
    -> ;
+------+------+---------+---------+
| f_id | s_id | f_name  | f_price |
+------+------+---------+---------+
| m2   |  105 | xbabay  |    2.60 |
| t1   |  102 | banana  |   10.30 |
| t4   |  107 | xbababa |    3.60 |
+------+------+---------+---------+
3 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/vincen123/article/details/82454951