2015-06-12 101 views
-1

我有一個SQL表格,其中電話號碼爲列。如何從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 ...

請幫忙。

+0

你能告訴我們什麼正確的結果是你給敬請6點的例子嗎? –

回答

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') 
+1

請指定這是哪個dbms! (看起來不像ANSI SQL,也沒有指定問題...) – jarlh

+0

我正在使用SQL Server 2012 .. –

+1

這對'1(5410)651-8868 x 5'不起作用,您應該添加這行也是:'set @phoneNumber = replace(@phoneNumber,'','')'替換空格。 –