sql >> Databasteknik >  >> RDS >> Mysql

Välj ALLA fält som endast innehåller VERSALER

Du kanske vill använda en skiftlägeskänslig sortering . Jag tror att standarden är skiftlägesokänslig. Exempel:

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

Sedan:

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

Om du inte vill använda en skiftlägeskänslig sortering för hela tabellen kan du också använda COLLATE klausul som @kchau föreslog i det andra svaret .

Låt oss försöka med en tabell som använder en skiftlägesokänslig sortering:

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

Detta kommer inte att fungera särskilt bra:

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

Men vi kan använda COLLATE sats för att sortera namnfältet till en skiftlägeskänslig sortering:

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


  1. Tidszonkonvertering i SQL-fråga

  2. VARNING:Office Version 2204 kan skada Access-applikationer

  3. Hur man beräknar ålder i MariaDB

  4. Kan jag använda CASE-satsen i ett JOIN-tillstånd?