Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie ALLE Felder aus, die nur GROSSBUCHSTABEN enthalten

Möglicherweise möchten Sie eine Sortierung verwenden, bei der die Groß-/Kleinschreibung beachtet wird . Ich glaube, die Voreinstellung ist Groß- und Kleinschreibung. Beispiel:

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

Dann:

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

Wenn Sie keine Groß-/Kleinschreibung für die gesamte Tabelle verwenden möchten, können Sie auch COLLATE Klausel wie @kchau vorgeschlagen in der anderen Antwort .

Versuchen wir es mit einer Tabelle, bei der die Groß-/Kleinschreibung nicht beachtet wird:

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

Das wird nicht sehr gut funktionieren:

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

Aber wir können den COLLATE verwenden -Klausel, um das Namensfeld in eine Sortierung mit Berücksichtigung der Groß-/Kleinschreibung zu sortieren:

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