我想检查,如果一个字符串只包含大写字母。我知道RLIKE / REGEXP在MySQL中不区分大小写。所以我尝试使用:upper:
字符类:
SELECT 'z' REGEXP '^[[:upper:]]+$';
这是真的,虽然z是小写的,......为什么?
答案 0 :(得分:23)
REGEXP不区分大小写,除非与二进制字符串一起使用。
所以考虑到这一点,只需做这样的事情:
SELECT * FROM `users` WHERE `email` REGEXP BINARY '[A-Z]';
使用上面的示例,您将获得包含一个或多个大写字母的电子邮件列表。
答案 1 :(得分:7)
对我而言,这是有效的,并没有使用正则表达式。它基本上将字段与mysql本身大写的字段进行比较。
-- will detect all names that are not in uppercase
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name <> BINARY UPPER(name)
;
答案 2 :(得分:4)
更改为区分大小写的排序规则,例如
CHARACTER SET latin1 COLLATE latin1_general_cs
然后尝试此查询,
SELECT 'z' REGEXP '^[A-Z]+$'
答案 3 :(得分:1)
这对我有用,以获取仅包含大写字符的行的列表:
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name = BINARY UPPER(name)
;