一、问题描述
最近工作中用到一个sql,需要用regexp
(正则匹配)查询某些数据,突然发现这个语句不区分大小写,导致结果有问题。
问题sql样例如下:
select
case when a.code REGEXP '^[a-z].*'
then concat(a.type, '_', substr(a.code, 2, length(a.code)) )
else a.code
END as code
from mytable a;
说明:
这个sql,本来是想把code开头为a-z
的,特殊处理下的(拼个type,然后去掉开头的第一个字符,注意mysql里第一个字符是从1开始的
,所以用2表示去掉第一个字符);
结果把开头为a-z
与A-Z
的都特殊处理了,有问题。
二、解决办法
增加binary
语句即可。
样例sql如下:
select
case when binary a.code REGEXP '^[a-z].*'
then concat(a.type, '_', substr(a.code, 2, length(a.code)) )
else a.code
END as code
from mytable a;
说明:
这样,就是能只匹配a-z
开头的了。