我今天有一个非常有趣的小SQL问题要解决,以为我想请社区看看您提出了什么解决方案。

我们已经使用了非常酷的电子邮件到文本服务,您只需将电子邮件发送到[email protected],它就会将文本消息发送到所需的电话号码。

例如,向0790 0006006发送文本,您需要向[email protected]发送电子邮件,非常简洁吗?

问题出在我们数据库中的电话号码上。大多数电话号码都可以,但是其中一些电话号码中混有“垃圾”。

拿这些您需要处理的垃圾的精彩示例(我已经在电话号码中添加了零,从而使电话号码匿名化):



要求

解决方案需要使用SQL(对于MS SQL Server)。

因此,挑战如下:我们需要获取没有空格且样本中没有任何垃圾的电话号码。

例如:

这:



应该变成这个:



其中没有电话号码的任何内容(例如“请注意”)都应为null。

更新:

感谢您的好评!我们已经找到了一些有趣的答案,但是由于没有一个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处理电话号码字段中的垃圾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2645558/

10-16 14:45