Microsoft Access:从提要中剥离遍布各处的电话号码

时间:2019-04-22 18:52:51

标签: sql ms-access formatting phone-number

在Microsoft Access中,我收到一个电话号码供稿,该电话号码需要处理并符合标准格式,以便在另一个系统中进行后处理。我给的数字到处都是。它们来自许多国家/地区,是国际性的,可能包括特殊字符,空格,parens,字母,有些带有扩展名,而有些则没有,也不都是带有区号。尽管如此,我仍需要在所有数字上均等地设置其格式。这就是我正在看的...

Ex.

+1_(860)_5666344_x_4454  <--- All _'s are spaces in the string

Convert To

8605666344

您知道,我们有一些特殊的考虑因素,例如:

1)国际号码,国家/地区代码可以是任何数字。因此,例如,美国国家代码为+1,而区域代码为246看起来像是巴巴多斯的国家代码为+1 246,而实际上却是美国区域代码为{ {1}}。我需要解决这个问题

2)我需要删除所有特殊字符,空格,字母(扩展名X),括号。

3)我需要删除所有扩展名,这些扩展名总是以(246)开头,尽管后面不一定总是有空格。

4)在某些情况下,甚至不包括区号。尽管如此,还必须执行其他规则(没有扩展名,没有特殊字符,没有国家代码和空格)

2 个答案:

答案 0 :(得分:0)

数据结构的一致性对于字符串操作至关重要。构建一个VBA自定义函数来处理这些数据。

首先,尝试嵌套Replace()函数以删除括号,s代表示例数据字符串:

Replace(Replace(s,"(",""),")","")

获取该值并运行If Then块以测试“ x”字符以及是否存在截断字符串。然后再用另一个If Then测试“ +”字符,如果存在则去掉前缀。

使用InStr,InStrRev,Mid,Left,Right,Len字符串操作功能。另一个Replace()可以删除空格或使用Val()。

一个基于给定样本数据的非常简单的代码示例:

Function ExtractPhoneNum(s As String) As String
Dim strS As String
strS = Replace(Replace(s, "(", ""), ")", "")
If InStr(strS, "x") <> 0 Then strS = Left(strS, InStr(strS, "x") - 1)
If InStr(strS, "+") <> 0 Then strS = Mid(strS, InStr(strS, " ") + 1)
ExtractPhoneNum = Val(strS)
End Function

答案 1 :(得分:0)

您可以在一行中清除数字:

Phone = "+1 (860) 566-6344 x4454"
CleanPhone = Split(Replace(Replace(Replace(Replace(t, " ", ""), "(", ""), ")", ""), "-", ""), "x")(0)

CleanPhone -> "+18605666344"

但是,如果第一个字符为“ +”,则显示的国际拨号代码可以使用1到4位数字。因此,您必须查找这些表格以找到匹配项。这些可以在许多来源找到-一个在这里:

Wikipedia: List of country calling codes