2013-05-15 23 views
5

Chcę sprawdzić, czy ciąg składa się tylko z wielkich liter. Wiem, że RLIKE/REGEXP nie rozróżniają wielkości liter w MySQL. Więc próbowałem użyć klasy :upper: znaków:Jak sprawdzić pisane dużymi literami w MySQL?

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

Daje to prawda, chociaż oo jest małymi literami, ... dlaczego?

Odpowiedz

4

zmiana na rozróżnianie wielkości liter, np.

CHARACTER SET latin1 COLLATE latin1_general_cs 

następnie spróbuj tej kwerendy,

SELECT 'z' REGEXP '^[A-Z]+$' 
+0

+1 miał ten sam pomysł, ale nie znał sztuczki z zestawem znaków Latin1 – Stephan

+0

A więc, dlaczego klasa postaci nie działa? Ponieważ używam złego sortowania? dlaczego dodawanie ': upper:' kiedy 'A-Z' robi to samo, a': upper: 'jest takie samo jak': lower: 'gdy sortowanie to' * _ci'? Myślałem, że '* _ci' podaje dafault, ale gdy używa się': upper: ', szuka wielkich liter. W opisie [: character_class:] na http://dev.mysql.com/doc/refman/5.0/en/regexp.html Mówi, że powinienem przejrzeć strony manuala 'ctype (3)'. Próbowałem 'help ctype',' man ctype', ... nic nie działało –

+0

Próbowałem: 'SELECT 'z' RLIKE '^ [AZ] $' COLLATE 'utf8_general_cs';', co dało mi błąd: 'ERROR 1273 (HY000): Nieznane sortowanie: 'utf8_general_cs''. Polecenie 'SELECT 'z' RLIKE '^ [A-Z] $' COLLATE 'utf8_general_ci';' działa poprawnie. Więc jak mogę zainstalować sortowanie z uwzględnieniem wielkości liter? –

13

REGEXP is not case sensitive, except when used with binary strings.

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

więc biorąc to pod uwagę, po prostu zrobić coś takiego:

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

Korzystając z powyższego przykładu, otrzymasz listę wiadomości e-mail zawierających jedną lub więcej wielkich liter.

2

Dla mnie to działa i nie używa wyrażeń regularnych. Zasadniczo porównuje to pole z samym sobą za pomocą samego mysql.

-- will detect all names that are not in uppercase 
SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name <> BINARY UPPER(name) 
; 
+0

To miłe, schludne rozwiązanie, dziękuję. –