Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez TOUS les champs qui ne contiennent que des lettres MAJUSCULES

Vous pouvez utiliser un classement sensible à la casse . Je crois que la valeur par défaut est insensible à la casse. Exemple :

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');

Ensuite :

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

Si vous ne souhaitez pas utiliser un classement sensible à la casse pour l'ensemble du tableau, vous pouvez également utiliser le COLLATE clause comme @kchau suggéré dans l'autre réponse .

Essayons avec un tableau utilisant un classement insensible à la casse :

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');

Cela ne fonctionnera pas très bien :

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

Mais nous pouvons utiliser le COLLATE clause pour assembler le champ de nom à un assemblage sensible à la casse :

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