Как проверить заглавные буквы в MySQL?

6

Я хочу проверить, если строка содержит только прописные буквы. Я знаю, что RLIKE/REGEXP не чувствительны к регистру в MySQL. Поэтому я попытался использовать класс: :upper: character:

SELECT 'z' REGEXP '^[[:upper:]]+$';

Это дает истину, хотя z в нижнем регистре... почему?

Теги:
uppercase

3 ответа

17

REGEXP не чувствителен к регистру, за исключением случаев, когда используется с двоичными строками.

http://dev.mysql.com/doc/refman/5.7/en/regexp.html

Поэтому, имея в виду это, просто сделайте следующее:

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

Используя приведенный выше пример, вы получите список писем, содержащих одну или несколько прописных букв.

4

изменение на чувствительность к регистру, например.

CHARACTER SET latin1 COLLATE latin1_general_cs

затем попробуйте этот запрос,

SELECT 'z' REGEXP '^[A-Z]+$'
  • 0
    +1 имел ту же идею, но не знал хитрости с набором символов latin1
  • 0
    Итак, но почему класс персонажей не работает? Потому что я использую неправильную сортировку? почему добавление :upper: когда AZ делает то же самое, а :upper: то же самое, что и :lower: когда сопоставление *_ci ? Я думал, что *_ci дает ошибку, но при использовании :upper: он ищет заглавные буквы. В описании [: character_class:] на dev.mysql.com/doc/refman/5.0/en/regexp.html говорится, что я должен взглянуть на справочные страницы ctype(3) . Я пытался help ctype , man ctype , ... ничего не получалось
Показать ещё 3 комментария
2

Для меня это работает и не использует регулярное выражение. Он в основном сравнивает поле с самим верхним индексом самой mysql.

-- will detect all names that are not in uppercase
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name)
;
  • 0
    Это отличное решение, спасибо.
  • 0
    Это решило для меня, просто хотел проверить, есть ли какая-либо заглавная буква в моих значениях столбца. Заменил UPPER в ответ на LOWER .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню