2015-05-01 62 views
1

我正在嘗試編寫一個MySQL查詢,它將選擇電話字段除短劃線或(空格)x之外的非數字字符的所有記錄。包括所有其他空間。在電話字段中選擇所有帶有文本的記錄

我想選擇被格式化的所有電話號碼: 000 000 0000,(000)000-0000,1-800-OurPhoneNumber,000.000.0000,000000000 EXT 0

基本上我想要什麼,沒有格式化:000-000-0000或000-000-0000 x0000

我知道必須有一個REGEXP可以選擇這個,但我不能爲我的生活似乎包裹我的頭圍繞REGEXP的

到目前爲止,我有SELECT * FROM customer WHERE telephone NOT REGEXP '[0-9]+'但這甚至不會返回像1-800-HIDEYOKIDSHIDEYOWIFE

+0

你可能會有更好的運氣,放棄'NOT'並將負號放入正則表達式本身 - 例如'[^ 0-9]'匹配任何字符而不是0-9的數字 – wrschneider

回答

0

呀,使用^$

我總是覺得有用得到儘可能具體用正則表達式。

SELECT * FROM customer WHERE telephone NOT REGEXP '^[0-9]{3}-[0-9]{3}-[0-9]{4}|[0-9]{3}-[0-9]{3}-[0-9]{4}\sx[0-9]+$';

無論你去鬆或緊正則表達式取決於你試圖讓,爲什麼什麼樣的數據。

+0

這個工作幾乎完美。仍然錯過了像000-000-0000h/000--000-0000c – user3167249

1

您需要將正則表達式錨定到開頭和結尾處,並使用^$

WHERE telephone NOT REGEXP '^[-0-9]+$' 

或者你可以使用一個補充字符集:

WHERE telephone REGEXP '[^-0-9]' 

在字符集的開頭來^使得任何字符集合中的不匹配。

允許可選的擴展使得它更復雜一點:

WHERE telephone NOT REGEXP '^[-0-9]+(x[0-9]+)?$' 
+0

謝謝清楚的解釋最後一個幾乎是我正在尋找的。我將如何包含不包含 - 的數字?例如:0000000000 – user3167249

相關問題