Mysql 区分大小写的RLIKE
考虑这样一个表Mysql 区分大小写的RLIKE,mysql,regex,Mysql,Regex,考虑这样一个表datatbl: +----------+ | strfield | +----------+ | abcde | | fgHIJ | | KLmno | +----------+ select * from datatbl where strfield rlike '[a-z]*'; 我想写一个类似这样的查询: +----------+ | strfield | +----------+ | abcde | | fgHIJ | | KLmn
datatbl
:
+----------+
| strfield |
+----------+
| abcde |
| fgHIJ |
| KLmno |
+----------+
select * from datatbl where strfield rlike '[a-z]*';
我想写一个类似这样的查询:
+----------+
| strfield |
+----------+
| abcde |
| fgHIJ |
| KLmno |
+----------+
select * from datatbl where strfield rlike '[a-z]*';
与非SQL正则表达式一样,我希望返回带有
abcde
的小写行,但不返回带有大写字母的行。我似乎找不到一个简单的方法来做这件事。我遗漏了什么愚蠢的东西吗?MySQL REGEXP/RLIKE在这方面很糟糕-您需要将数据转换为二进制文件,以便进行区分大小写的搜索:
SELECT *
FROM datatbl
WHERE CAST(strfield AS BINARY) rlike '[a-z]*';
您会发现在.编辑:我误读了OP,这是针对相反情况的解决方案,其中MySQL处于敏感排序规则中,您需要以不敏感的方式比较字符串
MySQL 5.x
您也可以使用函数来解决它
SELECT *
FROM datatbl
WHERE LOWER(strfield) RLIKE '[a-z]*';
MySQL 8+
如果您正在运行MySQL 8+,也可以在函数中使用不区分大小写的开关
SELECT *
FROM datatbl
WHERE REGEXP_LIKE(strfield, '[a-z]*', 'i');
仅供将来参考,要按照OP的要求匹配整个字符串,正则表达式必须是-rlike'^[a-z]*$”
OP要求区分大小写的匹配,因此您正在解决相反的问题:-)嗯,您是对的,我误读了OP的问题:-(事实上,我处理的是完全相反的问题,很高兴与大家分享我的解决方案。事实上,我不明白为什么OP的MySQL不区分大小写,而我的MySQL区分大小写(我希望是默认的)。检查您的排序规则,这就是区分大小写的定义。“\u CI”表示不区分大小写,“\u CS”对于区分大小写的。感谢您的澄清,@Zano。