区分大小写的RLIKE

时间:2010-06-30 22:37:13

标签: mysql regex

考虑一下这样的表datatbl

+----------+
| strfield |
+----------+
|    abcde |
|    fgHIJ |
|    KLmno |
+----------+

我想写一个像这样的查询:

select * from datatbl where strfield rlike '[a-z]*';

与非SQL正则表达式一样,我想返回w / abcde的行,但不返回带大写字母的行。我似乎找不到一个简单的方法来做到这一点。我错过了一些愚蠢的东西吗?

谢谢, 乔

2 个答案:

答案 0 :(得分:20)

MySQL REGEXP / RLIKE很糟糕 - 您需要将数据转换为BINARY以进行区分大小写的搜索:

SELECT * 
  FROM datatbl 
 WHERE CAST(strfield  AS BINARY) rlike '[a-z]*';

你会在comments for the REGEXP/RLIKE documentation中找到这个。

答案 1 :(得分:-1)

MySQL 5.x

您也可以使用LOWER()函数来解决它。

SELECT * 
FROM datatbl 
WHERE LOWER(strfield) RLIKE '[a-z]*';

MySQL 8 +

如果您运行的是 MySQL 8 + ,则还可以在REGEXP_LIKE()函数中使用不区分大小写的开关。

SELECT * 
FROM datatbl 
WHERE REGEXP_LIKE(strfield, '[a-z]*', 'i');