2015-02-09 34 views
0

當用戶輸入電話號碼的一部分時,我需要比較並找到該部分電話號碼的匹配記錄。我的問題是,每個人都以不同的方式輸入他們的電話號碼。在MySql中有沒有辦法將一個值與一列中的數字進行比較?

(555) 123-4567 
(444)333-2222 
1.800.876.9000 
1-555-333-1111 
etc. etc. and on and on. 

所以我的想法是,如果有一種方法來在數據庫中,然後我可以很容易地比較無論用戶選擇通過搜索... 555或9000或123從現場移除任何和所有標點。

有沒有一種辦法是這樣的:

SELECT * FROM person WHERE {only the digits of the phone column} LIKE '%searchValue%' 
+0

嘗試'RegExp'命令。看看這裏:http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html – Icemanind 2015-02-09 19:14:16

+1

你可以刪除這些符號,然後將其保存到數據庫或強制用戶使用給定的格式之一 – 2015-02-09 19:24:36

+0

@ExpectoPatronum,所有應有的尊重,這不是一個選項 – kasdega 2015-02-09 19:29:05

回答

1

原來,因爲我想有一些很容易的,我錯過了......

SELECT * 
FROM person p 
WHERE REPLACE(phone, '[^0-9]+', '') LIKE '%555123%'; 

正是我想要的。如果有更快捷,更快速的查詢方式,請讓我知道!

+0

您的解決方案將在大型錶慢,因爲表中的每一行都必須掃描。您無法使用索引。 – 2015-02-10 17:01:36

+0

Andy有另外一種方法嗎? – kasdega 2015-02-11 16:24:00

+0

您告訴@ExpectoPatronum您在保存到數據庫之前無法刪除符號,但我敢打賭,您可以創建第二個列,如沒有符號的「phonedigits」。然而,即使如此,你也只能在開始時沒有%的匹配,否則索引不會被使用。閱讀http://use-the-index-luke.com/關於索引的各種好東西。 – 2015-02-11 16:27:57

相關問題