一千萬個為什麽

搜索

SQL處理電話號碼字段中的垃圾

我今天有一個非常有趣的小SQL問題需要解決,並且我想讓社區看看你提出了什麽解決方案。

我們有一個非常酷的電子郵件到我們使用的文本服務,您只需要發送電子郵件到[email protected],它將發送短信到所需的電話號碼。

例如,要發送文本到0790 0006006,您需要發送電子郵件至[email protected],非常整潔吧?

問題在於我們數據庫中的電話號碼。大多數電話號碼都很好,但其中一些電話號碼中混有“垃圾”。

拿這些你需要處理的垃圾的精彩例子(我通過將零置於其中來匿名化電話號碼):

07800 000647(手機)
  07500 000189 USE 1ST
  看註意事項
  07900 000415 HO ONLY
  嘗試第1次0770 0000694然後回家
  07500 000465不能

要求

解決方案需要在SQL中(對於MS SQL服務器)。

因此挑戰如下,我們需要獲得沒有空格的電話號碼,並且沒有樣本中看到的任何垃圾。

例如:

這個:

嘗試第一次0770 0000694然後回家

Should become 這個:

07700000694

任何沒有電話號碼的東西(例如“SEE NOTES”)都應該為空。

更新:

感謝您的好評!我們已經有了一些有趣的答案,但是看到沒有任何SQL答案有任何投票,所以選擇一個最喜歡的東西有點困難。我寧願看到社區挑選的明確喜愛。

在我給出答案之前,我會讓問題成熟一點,看看是否有任何投票。

最佳答案

假設yopur手機始終以'07'開頭且長度為12個字符,您可以嘗試這樣的事情:

DECLARE @Number varchar(50)

--SET @Number='07800 000647(mobile)'
--SET @Number='07500 000189 USE 1ST'
--SET @Number='SEE NOTES'
--SET @Number='07900 000415 HO ONLY'
--SET @Number='try 1st 0770 0000694 then home'
SET @Number='07500 000465 Cannot '



SELECT REPLACE(SUBSTRING(@Number, case when CHARINDEX ('07',@Number ) =0 then Null 
else CHARINDEX ('07',@Number )end , 12),' ','')

首先,找到'07'字符串的起點,然後,如果它是0('SEE NOTES'),則返回Null。之後,獲取該數字的12個字符。 最後,更換空間......

轉載註明原文: SQL處理電話號碼字段中的垃圾