2012-11-13 85 views
1

我想搜索一個外包表,誰有電話列,但在數據庫中的電話號碼沒有架構。 因此,電話號碼是varchar,並有很多字符(例如:「」, - ,+,/)顯示/只喜歡的號碼(電話號碼選擇)

做到這一點mysql查詢什麼可以只喜歡在varchar數字?

Example: 
input: 30321321 

Database: 
+36-30/321 32-1 
70/32132131 
0630-32-13-21 

我的想法:

Select * from foo where phone like "%3%0%3%2%1%3%2%1%"; 

只是這是醜陋和資源密集型。 數據庫有100000行和2個電話列。

有什麼更好的想法嗎?

+0

你可以嘗試比賽(電話)反對嗎?但你需要確保你的數據庫是在全文索引的格式:)更好的解決方案將是 select * from foo WHERE phone REGEXP'pattern' – bonCodigo

+0

您可以添加一個新的列,只存儲數字,並使用專欄搜索? – MikeSmithDev

回答

-1

我會用REGEXP ...(我現在想我有兩個問題:))

試試這個:

SELECT * FROM foo WHERE phone REGEXP '3(.)?0(.)?3(.)?2(.)?1(.)?3(.)?2(.)?1'

注:這將忽略任何索引的手機列定義,因此如果在有很多行的表上運行它,請小心。

+0

我認爲OP正在尋找方法來尋找*特定*電話號碼,而不是可能代表有效電話號碼的字符串。 – dasblinkenlight

+0

但是_REGEXP_更像資源密集型的_LIKE_? – Csaba504

+0

最糟糕的是'LIKE':0 – Chandu