选择仅包含大写字母的所有字段

Aiv*_*ler 23 mysql

如何选择mysql中只包含大写字符的字段或不包含任何小写字符的字段?

Dan*_*llo 23

您可能希望使用区分大小写的排序规则.我相信默认值不区分大小写.例:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_cs;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');
Run Code Online (Sandbox Code Playgroud)

然后:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

如果您不想对整个表使用区分大小写的排序规则,您还可以在另一个答案中将该COLLATE子句用作@kchau建议.

让我们尝试使用不区分大小写的排序规则表:

CREATE TABLE my_table (
   id int,
   name varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;

INSERT INTO my_table VALUES (1, 'SomeThing');
INSERT INTO my_table VALUES (2, 'something');
INSERT INTO my_table VALUES (3, 'SOMETHING');
INSERT INTO my_table VALUES (4, 'SOME4THING');
Run Code Online (Sandbox Code Playgroud)

这不会很好:

SELECT * FROM my_table WHERE name REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | SomeThing |
|    2 | something |
|    3 | SOMETHING |
+------+-----------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但是我们可以使用该COLLATE子句将名称字段整理为区分大小写的排序规则:

SELECT * FROM my_table WHERE (name COLLATE latin1_general_cs) REGEXP '^[A-Z]+$';
+------+-----------+
| id   | name      |
+------+-----------+
|    3 | SOMETHING |
+------+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

  • 另一种方法是使用BINARY比较BINARY city_name = BINARY upper(city_name) (9认同)

Jas*_*net 8

这对我有用.它找到了所有带有大写字符的用户电子邮件:

SELECT * FROM users WHERE mail REGEXP BINARY '[A-Z]';
Run Code Online (Sandbox Code Playgroud)


kaf*_*hau 6

SELECT * FROM table1 WHERE (columnname COLLATE latin1_bin )=UPPER(depart);
Run Code Online (Sandbox Code Playgroud)