Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 区分大小写的RLIKE_Mysql_Regex - Fatal编程技术网

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。