2011-07-29 9 views
1

名前に英数字以外の文字が含まれているレコードを検索しようとしています。私はREGEXPREGEXPがmysqlで動作しない

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

でそれを行うことができると考え

は、その後、私は別のものを呼びSO

How can I find non-ASCII characters in MySQL?

に疑問を私はこのクエリを使用することができますが見つかりました:

SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9]'; 

しかし、私はtはゼロの行を返します。コマンドを次のように置き換えた場合:

SELECT * FROM tableName WHERE columnToCheck REGEXP '[A-Za-z0-9]'; 

私はすべての行を返します。

私はいくつかの基本的なコマンドを試してみました:

SELECT 'justffalnums' REGEXP '[[:alnum:]]'; returns 1 

正しいですが、それは1をretursなぜ

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]'; also returns 1 

は、私は理解しません。空白があるので0を返す必要があります。また、 '?' 。

regexpが動作するためにmysqlで有効になるものはありますか?

私はmysql 5.0を使用していて、5.1も試しました。

答えて

2

^(文字列が始まる)と$(文字列が終わる)と、特定の数の英数字を使用するオペレータを追加する必要があります。以下、私は+を使用しました。これは1つ以上を意味します。

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+$'; 
-- only contains alphanumns => 0 

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+'; 
-- just begins with alphanum => 1 

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]+$'; 
-- just ends with alphanum => 0 
+0

メッセージ102、レベル15、状態1、行1 近くに無効な構文 '^ [[:alnum:]]を+ $'。 – KingRider

0

あなたが与えた正規表現は、フィールド全体に問題の文字が含まれているとは言えません。文字セットの先頭に否定文字^を使用できます。

SELECT 'justff?alnums' REGEXP '[^A-Za-z0-9]'; returns 1 
SELECT 'justffalnums' REGEXP '[^A-Za-z0-9]'; returns 0 
関連する問題