web-dev-qa-db-ja.com

MySQLで英数字のみを含む行のみを選択する

私はMySQLで英数字のみを含むすべての行を選択しようとしています:

SELECT * FROM table WHERE column REGEXP '[A-Za-z0-9]';

ただし、英数字以外の文字が含まれているという事実に関係なく、すべての行が返されます。

42
code_burgar

このコードを試してください:

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$'

これにより、すべての文字が確実に一致します。

77
Aaron Digulla

ステートメントは、他の非英数字を含む場合でも、文字または数字を含む文字列と一致します。これを試して:

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$';

^および$は、文字列の一部ではなく、文字列全体が一致することを要求し、+は1を探しますまたはそれ以上英数字。

必要に応じて、名前付き文字クラスを使用することもできます。

SELECT * FROM table WHERE column REGEXP '^[[:alnum:]]+$';
8
John Kugelman

これを試して:

REGEXP '^[a-z0-9]+$'

正規表現では、バイナリフィールドを除き、大文字と小文字は区別されません。

3
Yannick Motton

これもあります:

select m from table where not regexp_like(m, '^[0-9]\d+$')

目的の列から文字を含む行を選択します(この例ではmですが、変更できます)。

ほとんどの組み合わせはOracleプラットフォームでは正しく動作しませんが、これは動作します。将来の参考のために共有しています。

0
apollo