Как вы выбираете поле, содержащее только символ верхнего регистра в mysql или поле, которое не содержит символов нижнего регистра?
Выберите ВСЕ поля, содержащие только буквы UPPERCASE
Ответ 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);
Ответ 4
Используя REGEXP
: http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/
Используйте [:upper:]
для заглавных букв.
SELECT * FROM table WHERE field REGEXP '^[[:upper:]+]$'
Ответ 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
заключается в сопоставлении, и от того, что вы можете там использовать, зависит ваша таблица.