更改所有电话号码SQL

时间:2013-11-21 04:45:52

标签: sql-server stored-procedures syntax

我正在SQL Server 2008 R2中为一个类构建一个示例数据库,并用虚拟数据填充它我可以创建存储过程等。

我想创建的其中一个是将所有电话号码(所有美国,10位数格式)更改为(XXX)XXX-XXXX。

我故意以不同的方式输入一组电话号码,并希望将它们全部格式化为上面列出的标准格式,因此无论数字在数据库中输入的是什么样式,它们都会正确格式化。

我甚至不知道如何开始这个。我还是SQL新手。另外......我正在拉数据库中的所有电话号码,而不只是从一个表中提取。

    CREATE PROC spPhoneNumberFormat
AS

Select Employees.Phone, Vendors.Phone, Vendors.AltPhone
From Employees join Vendors on employees.ID = vendors.ID

希望你们都能帮忙吗?

3 个答案:

答案 0 :(得分:1)

由于我不知道美国电话号码的格式,我只能提供有关如何解析和处理字符串的基本说明。

您可以使用 REPLACE(1,2,3)将字段解析为基本格式XXXXXXXXXX。 在替换中,1是您正在处理的完整字符串,2是您要替换的部分,3是您要替换它的部分。因此,您可以使用REPLACE(PHONENUM,'+','')删除加号。您可以组合REPLACE函数甚至在某种程度上使用REGEX来同时解析多个不同的字符,字符串等。 Google将为您提供有关如何使用的说明。

如果您的电话号码格式为XXXXXXXXXX,则可以使用子字符串等功能重新格式化。 IE:

SELECT '('+SUBSTRING(PHONENUM,1,3)+')'+SUBSTRING(PHONENUM,4,6)+'-'+SUBSTRING(PHONENUM,7,LEN(PHONENUM))

哪会将XXXXXXXXXX更改为(XXX)XXX-XXXX。

尝试并测试这些,你应该立刻让它工作。 :)

答案 1 :(得分:0)

答案 2 :(得分:0)

在SQL Server 2008的版本中,我有(r2)FBSDKLoginKit.framework函数的参数实际上是substring。因此,适当的查询要更改' XXXXXXXXXX'到'(XXX)XXX-XXXX'是:

(stringname, start location, length)

限定符update [TableName] set [phone] = '('+substring([phone],1,3)+')'+substring([phone],4,3)+'-'+substring([phone],7,4) where len([phone]) = 10 将阻止更改任何超过十个字符的记录 - 这可确保您的电话号码在连续两次意外运行查询时不会受到污染。