2015-11-19 76 views
0

我正在使用數據倉庫,我需要從電話號碼列中刪除一堆個案才能夠將其用作另一個數據源上的查找。什麼樣的數據看起來有些情況是:SQL從電話號碼中刪除字符

888-888-8888 --->應該是888888888
(888)888-8888 --->應該是888888888
888.888.8888 --->應是888888888
888-888-888分機888 --->應888888888
1-888-888-888 --->應888888888
888 88 8888 888888 --->應888888888888888

我能夠做多個替換語句來擺脫像 - ,。,(,)這樣的簡單字符。我遇到的部分是刪除'ext 888'和'1-',其中數字以'1-'開頭(不包含)。 888可以是任何數字,也可以是任意數量的數字。處理用戶輸入的信息和多個國家/地區。

是否有任何可用的東西可以在SQL中編寫,可以完成最後2個部分?

+0

trim會刪除前導空格,'upper(left(f,3))='EXT''會告訴你它是否以它開頭,或者你可以刪除非數字。 – Hogan

回答

1

的 '分機888' 可以固定: -

select STUFF('1-888-888-888 ext 888', PATINDEX('%ext [0-9][0-9][0-9]%', '1-888-888-888 ext 888'),8,'') 

對於以1開頭的部分,你可以嘗試: -

select STUFF('1-888-888-888',1,2,'') 

在這兩個例子中,你將取代「1 -888-888-888 ....'部分包含您的專欄名稱。

+0

我想試試,但'888'可能真的是任何東西..'ext:888','x888','ext888'等。我想我只需要爲每種可能的情況制定一個規則? – user985952

+0

我會這麼說,是的。有沒有一種簡單的方法來確定這個給出你的例子的所有可能的組合.. –

+0

@MatRichardson那麼你可以結合這兩個查詢和有完美的結果,我的一切都不是數字。 –