2011-08-08 21 views
3

我試圖返回只有那些可樂COLB不包含數字或空格MySQL的REGEXP無空白字符沒有數字

這裏是我到目前爲止的代碼行。

SELECT * FROM table_name WHERE colA REGEXP '[^0-9^\W]' AND colB REGEXP '[^0-9^\W]' 

給出的數據集

colA  colB 
---------- ---------- 
    test | testB 
     33 | text <- this is not returned 
    blah | 0123A <- this is returned 

我假設我的問題是我的正則表達式...任何幫助嗎?

回答

4

嗯,你的表達不起作用,因爲33是數字和你正在尋找任何非小數,非空白字符。所以它不包含結果中的那一行。

嘗試:

SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]' 

ETA:是啊,忘了\什麼不起作用

+0

好了,所以我將如何再篩選出任何包含了許多..和「只是一個空間」。基本上我有一個數據導入,其中包含很多無效值。 (包含數字的名稱,或者完全丟失)我只想返回有效的名稱。所以'如果val不包含數字並且不是空格(或者只是WHITESPACE)'請注意標記爲'NOT NULL'的列。所以我無法檢查一個空值。 – rlemon

+0

注意:我重新評估了範圍,您對這個答案是正確的。 – rlemon

+0

好的,所以colA LIKE「」用於刪除空白單元格(它們不爲空) – rlemon

0

未經測試,但給它一個嘗試

regexp '^[^0-9 ]+$' 
1

ID建議使用否定來代替:not regexp '[0-9[:space:]]'

SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]' 
1

MySQL不支持\whatever類型大部分逃脫。如果你想要空格,你需要使用[[:space:]],這是POSIX語法。有關regex man page here的詳細信息。

1

你可以嘗試另一種正則表達式如下:regexp '[^0-9\s]'

相關問題