2011-07-29 61 views
1

我正在嘗試查找具有非字母數字字符的名稱的記錄。REGEXP不能在mysql中工作

我以爲我可以與REGEXP做

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]'; 

但是我噸返回我零行。如果我將命令替換爲:

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

它將所有行返回給我!!

我嘗試了一些基本命令:

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

這是正確的,但

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

我不明白爲什麼它returs之一。它應該返回0,因爲它有空間並且還有'?' 。

是否有任何東西可以在MySQL中使正則表達式正常工作?

我正在使用mysql 5.0,並試過5.1。

回答

2

您需要添加^(字符串開頭)和$(字符串結尾)以及一個操作員說要使用一定數量的alphanum。下面我用+這意味着一個或多個。

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