mysql 正则表达式

由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)


在select中类似下面使用,结果:匹配返回1,不匹配返回0
select "fo" REGEXP "^fo$"


扩展正则表达式的一些字符:
'.'            匹配任何单个的字符。
[...]         匹配在方括号内的任何字符。例如,"[abc]"匹配"a"、"b"或"c"。为了命名字符的范围,使用一个"-"。"[a-z]"匹配任何字母,而"[0-9]"匹配任何数字
" * "        匹配零个或多个在它前面的字符。例如,"x*"匹配任何数量的"x"字符,"[0-9]*"匹配任何数量的数字,而".*"匹配任何数量的任何字符
"^"\"$"    匹配被测试值的开始\结尾
{m[,n]}   内只有一个整型参数m,表示字符只能出现m次;
              后面跟一个",",表示字符可以出现m次及以上; 
              后面跟一个",n",表示字符只能出现m次及以上,n次及以下 ;
              其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255) 如果同时给定了m和n,m必须小于或等于n. 
[a-dX]
[^a-dX] 
                匹配任何是(或不是,如果使用^的话)a、b、c、d或X的字符。两个其他字符之间的"-"字符构成一个范围,与从第1个字符开始到第2个字符之间的所有字符匹配。
例如,[0-9]匹配任何十进制数字 。
要想包含文字字符"]",它必须紧跟在开括号"["之后。
要想包含文字字符"-",它必须首先或最后写入。
对于[]对内未定义任何特殊含义的任何字符,仅与其本身匹配。
BINARY  想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b'
#为了找出以"fy"结尾的名字,使用"$"匹配名字的结尾: 
mysql> SELECT * FROM pet WHERE name REGEXP 'fy$'; 
+——–+——–+———+——+————+——-+ 
| name| owner | species | sex | birth | death | 
+——–+——–+———+——+————+——-+ 
| Fluffy | Harold | cat| f | 1993-02-04 | NULL | 
| Buffy | Harold | dog| f | 1989-05-13 | NULL | 
+——–+——–+———+——+————+——-+ 
#为了找出包含正好5个字符的名字,使用"^"和"$"匹配名字的开始和结尾,和5个"."实例在两者之间:
mysql> SELECT * FROM pet WHERE name REGEXP '^.....$'; 
+——-+——–+———+——+————+——-+ 
| name | owner | species | sex | birth | death | 
+——-+——–+———+——+————+——-+ 
| Claws | Gwen| cat| m | 1994-03-17 | NULL | 
| Buffy | Harold | dog| f | 1989-05-13 | NULL | 
+——-+——–+———+——+————+——-+ 
#你也可以使用"{n}""重复n次"操作符重写前面的查询:
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$'; 
+——-+——–+———+——+————+——-+ 
| name | owner | species | sex | birth | death | 
+——-+——–+———+——+————+——-+ 
| Claws | Gwen| cat| m | 1994-03-17 | NULL | 
| Buffy | Harold | dog| f | 1989-05-13 | NULL | 
+——-+——–+———+——+————+——-+
select "fonfo" REGEXP "^fo$";
#例子:
#    查找srv_keyword最后一个逗号','后的字符串,是null或者是以P-开头的,然后这部分删掉
#    如:专服务,规划类服务,P-1605061  |  专服务,规划类服务,null结果都应该是:专服务,规划类服务
#    mysql找最后一个符号的位置没有直接的函数,用反转函数reverse间接实现
select product_name
      ,base_product_name
      ,srv_keyword 
      ,REVERSE(substring(REVERSE(srv_keyword),LOCATE(',',REVERSE(srv_keyword))+1))
from srv
where srv_keyword not like CONCAT("%",product_id,"%")
and srv_keyword REGEXP ',(null|(P-.*))$'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值