Подтвердить что ты не робот

Выберите ВСЕ поля, содержащие только буквы UPPERCASE

Как вы выбираете поле, содержащее только символ верхнего регистра в mysql или поле, которое не содержит символов нижнего регистра?

4b9b3361

Ответ 1

Вы можете использовать сортировку с учетом регистра. Я считаю, что по умолчанию регистр не учитывается. Пример:

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

Затем:

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

Если вы не хотите использовать сортировку с учетом регистра для всей таблицы, вы также можете использовать предложение 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');

Это не будет работать очень хорошо:

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

Но мы можем использовать предложение 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)

Ответ 2

Это сработало для меня. Он нашел все электронные письма пользователей с символом верхнего регистра:

SELECT * FROM users WHERE mail REGEXP BINARY '[A-Z]';

Ответ 3

SELECT * FROM table1 WHERE (columnname COLLATE latin1_bin )=UPPER(depart);

Ответ 5

Попробуй это -

SELECT * FROM <mytable> WHERE UPPER(<columnname>) = <columnname>

Ответ 6

Базовый например

SELECT * FROM foo WHERE bar REGEXP '[A-Z]';

Ответ 7

SELECT column_name FROM table WHERE column_name REGEXP BINARY '^[A-Z]+$'

Ответ 8

Нашел это в комментариях - он заслуживает отдельного поста:

SELECT * FROM mytable WHERE BINARY mycolumn = BINARY UPPER(mycolumn);

Проблема с WHERE UPPER(mycolumn) = mycolumn заключается в сопоставлении, и от того, что вы можете там использовать, зависит ваша таблица.