web-dev-qa-db-ja.com

MySQLで大文字をチェックする方法は?

文字列が大文字のみで構成されているかどうかを確認したいと思います。 MySQLではRLIKE/REGEXPで大文字と小文字が区別されないことを知っています。そこで、:upper:文字クラスを使用しようとしました。

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

Zは小文字ですが、これは当てはまります...なぜですか?

15
R_User

REGEXPは、バイナリ文字列で使用される場合を除いて、大文字と小文字を区別しません。

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

したがって、それを念頭に置いて、次のようなことを行ってください。

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

上記の例を使用すると、1つ以上の大文字を含む電子メールのリストが得られます。

26
Kyle Anderson

私にとってこれは機能し、正規表現を使用していません。基本的に、フィールドをmysql自体によって大文字にされたそれ自体と比較します。

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

大文字と小文字を区別する照合に変更します。

CHARACTER SET latin1 COLLATE latin1_general_cs

次に、このクエリを試してください。

SELECT 'z' REGEXP '^[A-Z]+$'
4
John Woo

これは、大文字のみの行のリストを取得するのに役立ちました。

SELECT 
    name, UPPER(name) 
FROM table 
WHERE 
    BINARY name = BINARY UPPER(name)
;
1
Harshit Agrawal