1

10列で構成される1つのテーブルがあり、そのうち1列は username です。username 列には、大文字と小文字の学生の名前が格納されます。大文字と小文字の学生を分離したい.ユーザー名が大文字で構成されている場合、行がリストされます。ユーザー名の列のクエリを実行することに興味があります。他の列にも大文字がありますが、ユーザー名の列のみに基づいてリストしたいと考えています。いくつかのクエリを試しましたが、誰も機能していません。アドバイスをお願いします

列のユーザー名に大文字を含む行を一覧表示したい。私はこれらのコードを試しました

SELECT * FROM accounts WHERE LOWER(username) LIKE '%q'

機能しませんでした

SELECT * FROM accounts WHERE UPPER(username) = UPPER('%q')

機能しませんでした

SELECT * FROM accounts where username COLLATE latin1_swedish_ci = '%q'

機能しませんでした

SELECT * FROM accounts WHERE username REGEXP '[A-Z]';

機能しませんでした

SELECT * FROM accounts WHERE username REGEXP '^[[:upper:]+]$'

機能しませんでした

4

6 に答える 6

6
SELECT *          
FROM accounts          
WHERE CAST(username AS BINARY) RLIKE '[A-Z]'; 
于 2012-07-23T15:44:04.427 に答える
1
CREATE TABLE accounts (
   id int,
   username varchar(50)
) CHARACTER SET latin1 COLLATE latin1_general_ci;

SELECT* FROM accounts WHERE username REGEXP '^[A-Z]+$';

COLLATE latin1_general_ciを必ず使用してください

于 2012-07-23T15:49:03.843 に答える
0

照合は順調に進みましたが、クエリだけでなく、照合されるテーブルが必要です。できることは、新しいテーブルを作成し、現在の行を新しい照合テーブルに挿入してから、REGEX または残りの方法を試すことです。

大文字のみを含むすべてのフィールドを選択

于 2012-07-23T15:46:53.643 に答える
-1

最初に、検索しているフィールドに latin1_general_cs のようなケース固有の照合があることを確認する必要があります (ラテン文字セットを使用している場合)。次に、大文字または小文字のどちらを探しているかを検索できます (つまり、WHERE username LIKE '%q%' または WHERE username LIKE '%Q%' のようになります)。

于 2012-07-23T15:43:28.483 に答える
-1

Mysql は文字列の大文字と小文字を区別しないため、単一の select ステートメントよりも複雑になります。この比較を頻繁に行う場合は、ユーザー名列の型を以下にリストされているバイナリ型のいずれかに変換します。

http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

これを頻繁に行いたくない場合は、現在のテーブルの結果を一時テーブルに保存し、そのテーブルを大文字と小文字を区別する文字列型に変更してから、正規表現を使用することを検討してください。

于 2012-07-23T15:44:11.843 に答える