Как проверить заглавные буквы в MySQL?
Я хочу проверить, если строка содержит только прописные буквы. Я знаю, что RLIKE/REGEXP не чувствительны к регистру в MySQL. Поэтому я попытался использовать класс: :upper:
character:
SELECT 'z' REGEXP '^[[:upper:]]+$';
Это дает истину, хотя z в нижнем регистре... почему?
Ответы
Ответ 1
REGEXP не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.
http://dev.mysql.com/doc/refman/5.7/en/regexp.html
Поэтому, имея в виду это, просто сделайте следующее:
SELECT * FROM 'users' WHERE 'email' REGEXP BINARY '[A-Z]';
Используя приведенный выше пример, вы получите список писем, содержащих одну или несколько прописных букв.
Ответ 2
Для меня это работает и не использует регулярное выражение. Он в основном сравнивает поле с самим верхним индексом самой mysql.
-- will detect all names that are not in uppercase
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name <> BINARY UPPER(name)
;
Ответ 3
изменение на чувствительность к регистру, например.
CHARACTER SET latin1 COLLATE latin1_general_cs
затем попробуйте этот запрос,
SELECT 'z' REGEXP '^[A-Z]+$'
Ответ 4
Это сработало для меня, чтобы получить список строк, имеющих только символы верхнего регистра:
SELECT
name, UPPER(name)
FROM table
WHERE
BINARY name = BINARY UPPER(name)
;