我有电话号码字段来清理并试图找到这种格式的垃圾号码 数字模式:如000000,111111,222222,3333333,4444444,....
Phone
----------------
(444)333-7777
555.666.6666
333.555-7777
222-222-2222
1111111111
5104554535
(555)(353)(5343)
电话(输出我想看的是)
222-222-2222
1111111111
和第二个问题我想知道记录的数量有特殊字符。从上面的电话字段我想得到5作为计数。
感谢您的帮助。
答案 0 :(得分:2)
这可以找到十位数的重复数字
WITH cleaned_numbers AS (
select regexp_replace(number, '[^0-9]', '', 'g') AS number
from phone_numbers
)
select number
from cleaned_numbers
where number::text ~ '([0-9])(\1)(\1)(\1)(\1)(\1)(\1)(\1)(\1)(\1)'
答案 1 :(得分:0)
根据@ Shayna的出色回应,您可以使用正则表达式寻找重复数字来查找问题的第一部分。更改大括号之间的数字以检查不同数量的重复数字:
with
t1(phone) as (values ('000-000-000'::text), ('(000)000-0000'), ('000-000-0000'), ('0000000001'),('0000000000'),('765-456-6656')),
cleaned_numbers AS ( select phone, regexp_replace(Phone, '[^0-9]', '', 'g') AS numeric_phone from t1 )
select *
from cleaned_numbers
where numeric_phone ~ '([0-9])\1{8}'
order by phone
问题的第二部分,再次使用正则表达式识别除数字或空格以外的其他电话(删除括号之间的空格以查找包含空格的电话号码,或添加您认为有效的任何符号,像括号和短划线一样):
with
t1(phone) as (values ('000-000-000'::text), ('(000)000-0000'), ('000-000-0000'), ('0000000001'),('0000000000'),('765-456-6656'))
select count(*)
from t1
where phone ~ '[^0-9 ]'
答案 2 :(得分:0)
不幸的是,我没有找到真正清理的解决方案,并且修复了来自不同供应商的带有奇数字符的电话号码。在VBA中有解决方案并将其修改为SQL格式。下面是如何创建如何使用的功能和样本。
使用功能更新电话号码后,只需删除所有''电话号码,你是黄金。如果您不想删除该字段,则可以忽略最后的if语句和Set。最好不要在PK字段上运行可能创建重复项。
我使用功能清理电话号码,这将修复所有电话号码问题或清除字段。如果为空,则返回Null(防止错误)
Print'/*Fix Phone Numbers Call*/'
Update tblTemp
Set Phone = dbo.fnPhoneFix(tblTemp.Phone)
From tblTemp
要创建功能,请使用以下代码:
CREATE FUNCTION [dbo].[fnPhoneFix](@PhoneOld VarChar(20))
Returns VarChar(10)
AS
Begin
Declare @iCnt Int = 0
Declare @PhoneNew VarChar(15) = ''
IF @PhoneOld IS NULL
RETURN NULL;
While @iCnt <= LEN(@PhoneOld)
Begin
IF Substring(@PhoneOld,@iCnt,1) >= '0' AND Substring(@PhoneOld,@iCnt,1) <= '9'
Begin
SET @PhoneNew = @PhoneNew + Substring(@PhoneOld,@iCnt,1)
End
Set @iCnt = @iCnt + 1
End
If LEN(@PhoneNew) > 10 and Left(@PhoneNew, 1) = '1'
Set @PhoneNew = RIGHT(@PhoneNew,10);
Else
Set @PhoneNew = Left(@PhoneNew,10);
If @PhoneNew = '0000000000' or @PhoneNew = '1111111111'
or @PhoneNew = '2222222222' or @PhoneNew = '3333333333'
or @PhoneNew = '4444444444' or @PhoneNew = '5555555555'
or @PhoneNew = '6666666666' or @PhoneNew = '7777777777'
or @PhoneNew = '8888888888' or @PhoneNew = '9999999999'
or LEN(@PhoneNew) <> 10
Set @PhoneNew ='';
Return @PhoneNew
End
答案 3 :(得分:-1)