我的數據庫包含一個varchar類型的電話號碼列表。電話號碼可以是任何一種格式需要幫助來編寫搜索查詢
12323232323
1-232-323 2323
232-323-2323
2323232323
取而代之的是–
符號有可能是(
)
,
.
或space
如果我搜索12323232323,1-232-323 2323,232-323-2323 ,或者2323232323它應該顯示所有這些結果。我需要爲此寫一個查詢。
我的數據庫包含一個varchar類型的電話號碼列表。電話號碼可以是任何一種格式需要幫助來編寫搜索查詢
12323232323
1-232-323 2323
232-323-2323
2323232323
取而代之的是–
符號有可能是(
)
,
.
或space
如果我搜索12323232323,1-232-323 2323,232-323-2323 ,或者2323232323它應該顯示所有這些結果。我需要爲此寫一個查詢。
我認爲這樣做實時效率不高,我提出了兩個選擇。
清理數據,所以只會有一種格式。
添加另一列包含乾淨的數據,所以當您搜索時,您搜索此列,當顯示時您可以顯示各種格式的數據。
正是這樣。 +1 –
我同意詹姆斯,但如果你真的需要在數據庫中搜索,因爲它是,也許是MySQL的更換運營商將會把你帶到任何你需要去。喜歡的東西
select * from mytable where replace(crazynumber,'-','')='23232323';
它適用於單個字符替換。是否有可能取代一個字符串數組?在我的情況下可能有'(),。或空間'而不是'-'。 – Juice
我試着用這樣的數組''替換(c.customers_telephone,''。$ chars。'','')='「。 $ onlynumbers。 「'」;'和我得到的查詢運行像這樣'where replace(c.customers_telephone,'Array','')='2323232323'' – Juice
請注意,如果你走這條路線,你不能使用索引加快查詢速度;您將強制MySQL爲每個查詢執行全表掃描。我強烈建議您改爲清理數據。 – 2011-11-09 13:47:53
How to Replace Multiple Characters in SQL?
Can MySQL replace multiple characters?
與詹姆斯同意,但如果u真的需要這樣做,上述兩個環節都提出了知府解決方案,爲您的方案。
你看過[MySQL字符串函數](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)嗎? –
你真的需要保存電話號碼的格式嗎?您是否考慮將電話號碼存儲爲單一格式,並根據當前用戶的本地化設置顯示這些電話號碼時重新格式化它們? – 2011-11-09 13:49:16
@Phoenix我同意你可能不想用數字來存儲格式,但我認爲根據用戶的語言環境來格式化,例如用德文格式表示美國數字是不合理的。如果本地化是一個問題,您可能需要存儲國家代碼,然後根據該代碼格式化數字。 –