MySQL利用正则表达式匹配

最近做项目遇到一个奇怪的问题,整个系统有一套统一的编号机制,设备的编号就是:变电站编号+设备种类+流水号,但是很奇怪的就是设备编号中的变电站编号是小写,而变电站中的变电站编号是大写,这就导致LIKE模糊搜索不出来(但是在网上查,好多人说LIKE是不区分大小写的,不过我的确实是有这个问题),而编号中有的大写、有的小写,转换成两套(大小写)也不太可行,最后在网上找到了MySQL的正则表达式匹配方法)——REGEXP

学过编译原理应该都知道正则表达式这个东西,这里就不多赘述,不懂的百度一下应该也懂了,主要讲一下用法,比如说我要找出像140VGJBDZxxxxxx(x为数字)的编号,其中大小写不区分,其实简单点用蛮简单的,直接WHERE 字段 REGEXP 正则表达时即可,那么我们这个SQL语句就是

SELECT no FROM equ_equipment_m WHERE no REGEXP '140[V|v][G|g][J|j][B|b][D|d][Z|z]([0-9])+'

最后说说效率问题,LIKE在没有索引并且左边不确定的情况下(左边是%),效率和正则表达式差不多,但是在左边确定的情况下,效率就要比正则表达式快上不少了,但是正则表达式的功能绝对是要比LIKE强大很多。

如果想对MySQL正则表达式的使用进一步了解的话,可以看看这篇博客

https://blog.csdn.net/qq_36761831/article/details/82862135

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值