mysql常用的字符匹配列表
选项 | 说明 | 例子 |
---|---|---|
^ | 匹配文本的开始字符 | ^b:匹配以字母b开头的字符串 |
$ | 匹配文本的结束字符 | st$:匹配以st结尾的字符串 |
. | 匹配任何单字字符 | b.t:匹配b与t之间任意一个字符 |
* | 匹配零个或者多个在它前面的字符 | f*n :匹配n前面零个或者多个f字符的字符串 |
+ | 匹配前面的字符一次或者多次 | ba+:匹配以b 开头的后面紧跟一个或者多个a的字符串 |
<字符串> | 匹配包含指定字符串的文本 | bc:匹配包含’bc’的字符串 |
[字符集合] | 匹配字符集合中的任一个字符 | '[x,y]:'匹配x或者y |
[^] | 匹配不在括号内的任意一个字符 | ‘[^abc]:’ 匹配任何一个不包含a,b,c的字符串 |
字符串{n,} | 匹配前面的字符串至少n次 | b{2}:匹配至少2个或者更多的b |
字符串{n,m} | 匹配前面的字符串至少n次,至多m次 | b{2,4}:匹配最少两个最多4个b字符的字符串 |
关于*匹配
只是匹配*前的字符,有0个或者多个,也就是在*号的后面的字符为基准,找前面可能不能找到要匹配的字符,但是要找到要匹配的字符的前面的字符(也就是匹配0次。
mysql> select 'fxnsjknefasanjjiwwiianx' regexp 'fasaj*n';
+--------------------------------------------+
| 'fxnsjknefasanjjiwwiianx' regexp 'fasaj*n' |
+--------------------------------------------+
| 1 |
+--------------------------------------------+
要么匹配多次。
mysql> select 'fxnsjknefasajjjnjjiwwiianx' regexp 'fasaj*n';
+-----------------------------------------------+
| 'fxnsjknefasajjjnjjiwwiianx' regexp 'fasaj*n' |
+-----------------------------------------------+
| 1 |
+-----------------------------------------------+
mysql> select 'fxnsjknefasajjajnjjiwwiianx' regexp 'fasaj*n';
+------------------------------------------------+
| 'fxnsjknefasajjajnjjiwwiianx' regexp 'fasaj*n' |
+------------------------------------------------+
| 0 |
+------------------------------------------------+
语法为regexp
加匹配模式。
开头匹配
select * from student where Sid regexp '^张';
替代任意一个字符
select * from student where Sname regexp 'a.g';
匹配多个字符
select * from fruits where f_name regexp '^ba*';
like
也可以进行字符的匹配,但是它匹配的字符串如果在文本中间出现,则找不到它,不会返回相应的行。例如:
mysql> select * from course where cname regexp 's.n';
+-----------+-------------------+------------+---------+
| Cno | Cname | Pre_Cno | Credits |
+-----------+-------------------+------------+---------+
| 100127865 | DB_csdn设置 | 1939029898 | 2 |
| 100127869 | DB_csdn设置与拍摄 | 1939029898 | 2 |
+-----------+-------------------+------------+---------+
2 rows in set (0.00 sec)
mysql> select * from course where cname like 's.n';
Empty set (0.00 sec)
匹配指定字符的任意一个
匹配水果表的名字字段有o或者t的水果的信息。
select * from fruits where f_name regexp '[ot]';
同理,匹配任意不在就用[^字符]
select * from fruits where f_id regexp '[a-e1-2]';
指定出现的次数
查询在水果表中名字至少存在两个x的水果的信息。
select * from fruits where f_name regexp 'x{2,}';