SQL Server 2000: how do I return only the number from a phone number column

前端 未结 3 1983
耶瑟儿~
耶瑟儿~ 2021-01-19 16:49

I\'m trying to strip out the \"(\", \")\", \"-\", \"x\" or \"X\" \"ext\" and spaces from each phone number so I am left with only the first 10 digits or 1st 10 numbers of a

相关标签:
3条回答
  • 2021-01-19 17:35

    Another way to do it, if you didn't want to use a User Defined Function would be to use the REPLACE function, like so:

    SELECT Phone, REPLACE(REPLACE(REPLACE(REPLACE(Phone,' ',''),'(',''),')',''),'-','') AS NewPhone
    FROM Contacts
    

    Although its a bit klunky, it should serve your purpose.

    0 讨论(0)
  • 2021-01-19 17:46

    I think your only option is to create a UDF that does it. If you were using 2005+ you could create a CLR function to do it.

    UDF:

    create function dbo.RemoveNonNumericChar(@str varchar(500))  
    returns varchar(500)  
    begin  
    declare @startingIndex int  
    set @startingIndex=-1 
    while @startingIndex <> 0 
    begin  
        set @startingIndex= patindex('%[^0-9]%',@str)  
        if @startingIndex <> 0  
        begin  
            set @str = replace(@str,substring(@str,@startingIndex,1),'')  
        end   
    end  
    return @str  
    end
    
    go  
    
    select dbo.RemoveNonNumericChar('(555) 555-5555 ext55555')  
    
    0 讨论(0)
  • 2021-01-19 17:56

    See if this works:

    Declare @Expression varchar(15)
    Declare @MyVariable varchar(20)
    
    Set @Expression = '%[^0-9]%' 
    Set @MyVariable = '(555) 555-5555 ext55555'
    
    While PatIndex(@Expression, @MyVariable) > 0
       Set @MyVariable = Stuff(@MyVariable, PatIndex(@Expression, @MyVariable), 1, '')
    
    Print @MyVariable
    

    555555555555

    0 讨论(0)
提交回复
热议问题