+39 235 6595750
19874624611
+44 (0)181 446 5697
+431 6078115-2730
+1 617 358 5128
+48.40.23755432
+44 1691 872 410
07825 893217
0138 988 1649
(415) 706 2001
00 44 (0) 20 7660 4650
(765) 959-1504
07731 508 486
please reply by email
dont have one
+447769146971
请参阅上面给出的电话号码。我需要从这些数字中替换所有空格,连字符,句点,括号和前导0等。我需要这种格式+447469186974
如果数字有前导加号,那么不要替换它,否则我必须连接+符号。
E.G
+39 235 6595750 在这个数字中我只需要删除空格。
+44(0)181 446 5697 在此我需要删除空格和括号以及括号之间的0,即(0)
07825 893217 在此我需要用+号替换前导0并删除空格
(415)706 2001 在此替换'('with + sign并删除')'和空格。
'请通过电子邮件回复'这是电话号码字段中的条目,我只需要忽略它。
+48.40.23755432 删除电话号码中的句号
(765)959-1504 删除括号和空格以及连字符,并在数字前添加+号。
7798724250 只需在号码前添加+号
00 44(0)20 7660-4650 需要删除前导0 IE'00'删除空格和括号,并在括号和连字符之间删除0并在数字前面添加+号
只会替换前导'0'而不会替换任何其他'0'
所需的结果是 +447769146971
我应该为每个要替换的字符使用嵌套的REPLACE,CHARINDES,PATINDES吗?
编辑:我不必在db中更新这些数字。我只是想在我的查询中使用这些数字来匹配这些数字与呼叫日志数据库中的数字。在呼叫日志中,db格式总是像这样+447769146971
感谢。
答案 0 :(得分:6)
尝试一下:
SET NOCOUNT ON
DECLARE @Phone table (PhoneNo varchar(50))
INSERT INTO @Phone VALUES ('+39 235 6595750')
INSERT INTO @Phone VALUES ('19874624611')
INSERT INTO @Phone VALUES ('+44 (0)181 446 5697')
INSERT INTO @Phone VALUES ('+431 6078115-2730')
INSERT INTO @Phone VALUES ('+1 617 358 5128 ')
INSERT INTO @Phone VALUES ('+48.40.23755432')
INSERT INTO @Phone VALUES ('+44 1691 872 410')
INSERT INTO @Phone VALUES ('07825 893217')
INSERT INTO @Phone VALUES ('0138 988 1649')
INSERT INTO @Phone VALUES ('(415) 706 2001')
INSERT INTO @Phone VALUES ('00 44 (0) 20 7660 4650')
INSERT INTO @Phone VALUES ('(765) 959-1504')
INSERT INTO @Phone VALUES ('07731 508 486')
INSERT INTO @Phone VALUES ('please reply by email')
INSERT INTO @Phone VALUES ('dont have one')
INSERT INTO @Phone VALUES ('+447769146971')
SET NOCOUNT OFF
;WITH StripNumber AS
(
SELECT
PhoneNo,
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(PhoneNo
,'(','')
,')','')
,'.','')
,' ','')
,'-','')
,'+','') AS StripNumber
FROM @Phone
)
SELECT
CASE
WHEN ISNUMERIC(StripNumber)=1 THEN '+'+CONVERT(varchar(50),CONVERT(bigint,StripNumber))
ELSE PhoneNo --make this ELSE NULL if you don't want to see invalid non numeric phone numbers
END AS PhoneNumber
FROM StripNumber
输出:
PhoneNumber
---------------------------------------------------
+392356595750
+19874624611
+4401814465697
+43160781152730
+16173585128
+484023755432
+441691872410
+7825893217
+1389881649
+4157062001
+4402076604650
+7659591504
+7731508486
please reply by email
dont have one
+447769146971
(16 row(s) affected)
修改强>
基于OP的最新编辑:I don't have to update these numbers in db. I just want to use these numbers in my query to match these numbers...
为什么你想在每次运行查询时格式化数字?将格式化的数字存储在数据库中,然后加入它们。即使你只是制作了一个PERSISTED计算列或一个带有这个格式化数字索引的视图,你也会有更好的表现。
答案 1 :(得分:2)
一种解决方案是创建一个功能
Create Function ExtractDigits( @inVal varChar(50), @EliminateLeadingZeroes TinyInt)
Returns VarChar(50)
As
Begin
Declare @outVal VarChar(50)
Set @outVal = ''
Declare @C Char(1)
While Len(@Inval) > 0 Begin
Set @C = Left(@InVal, 1)
Set @InVal = SubString(@InVal, 2, Len(@InVal) -1)
If @C Between '0' And '9'
Set @outVal = @outVal + @C
End
If @EliminateLeadingZeroes = 1
While Left(@outVal,1) = '0'
Set @OutVal = Substring(@OutVal,2,Len(OitVal) -1)
Return @OutVal
End
然后像这样编写Update Statement:
While Exists (Select * From table
Where Phone Not Like'+[0-9]%'
Update table Set
Phone = '+' + dbo.ExtractDigits(Phone, 1)
Where Phone Not Like'+[0-9]%'