如何从SQL中的电话号码中提取*区号*

时间:2015-06-12 06:46:54

标签: sql sql-server-2012

我有一个SQL表,其中包含以下电话号码列。

(201) 411-5200x4002
1 (5410) 651-8868 x 5
1-308-987-5920 x8031
2118477656
2195992321x289
313-877-5916

我需要从这些电话号码中提取Area Code。区号是数字的前三位数。但如果我们也有国家代码(1(5410)651-8868),那么很难找到。

我正在使用SQL Server 2012 ...

请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以创建一个功能,您可以将手机传递给否,它会返回区号。

CREATE FUNCTION [dbo].[f_GetAreaCode] 
(
    @phoneNumber as nvarchar(200)
)
RETURNS nvarchar(50)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @areaCodeAbbr as nvarchar(50)

    -- Add the T-SQL statements to compute the return value here
    if Exists(select 1 from sys.tables where @phoneNumber like '1-%' or @phoneNumber like '1(%') or @phoneNumber like '1 %')
        set @phoneNumber = RIGHT(@phoneNumber,len(@phoneNumber)-2)

    set @phoneNumber = replace(@phoneNumber,'(','')
    set @phoneNumber = replace(@phoneNumber,')','')
    set @phoneNumber = replace(@phoneNumber,'-','')
    set @phoneNumber = LTRIM(@phoneNumber)

    SELECT 
        @areaCodeAbbr = left(@phoneNumber,3)

    -- Return the result of the function
    RETURN @areaCodeAbbr

END

要调用该函数,请编写类似 -

的sql
Select dbo.f_GetAreaCode('(201) 411-5200x4002')