How to format a numeric column as phone number in SQL

后端 未结 10 1157
情深已故
情深已故 2020-12-05 23:26

I have table in the database with a phone number column. The numbers look like this:

123456789

I want to format that to look like this:

相关标签:
10条回答
  • 2020-12-05 23:58

    Solutions that use SUBSTRING and concatenation + are nearly independent of RDBMS. Here is a short solution that is specific to SQL Server:

    declare @x int = 123456789
    select stuff(stuff(@x, 4, 0, '-'), 8, 0, '-')
    
    0 讨论(0)
  • 2020-12-06 00:01

    You can also try this:

    CREATE  function [dbo].[fn_FormatPhone](@Phone varchar(30)) 
    returns varchar(30)
    As
    Begin
    declare @FormattedPhone varchar(30)
    
    set     @Phone = replace(@Phone, '.', '-') --alot of entries use periods instead of dashes
    set @FormattedPhone =
        Case
          When isNumeric(@Phone) = 1 Then
            case
              when len(@Phone) = 10 then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 4, 3)+ '-' +substring(@Phone, 7, 4)
              when len(@Phone) = 7  then substring(@Phone, 1, 3)+ '-' +substring(@Phone, 4, 4)
              else @Phone
            end
          When @phone like '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 8, 4)
          When @phone like '[0-9][0-9][0-9] [0-9][0-9][0-9] [0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 9, 4)
          When @phone like '[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' Then '('+substring(@Phone, 1, 3)+')'+ ' ' +substring(@Phone, 5, 3)+ '-' +substring(@Phone, 9, 4)
          Else @Phone
        End
    return  @FormattedPhone
    

    end

    use on it select

    (SELECT [dbo].[fn_FormatPhone](f.coffphone)) as 'Phone'
    

    Output will be

    0 讨论(0)
  • 2020-12-06 00:01

    You Can Use FORMAT if you column is a number Syntax like FORMAT ( value, format [, culture ] ) In use like FORMAT ( @d, 'D', 'en-US' ) or FORMAT(123456789,'###-##-####') (But This works for only SQL SERVER 2012 And After)

    In Use Like UPDATE TABLE_NAME SET COLUMN_NAME = FORMAT(COLUMN_NAME ,'###-##-####')

    And

    if your column is Varchar Or Nvarchar use do like this CONCAT(SUBSTRING(CELLPHONE,0,4),' ',SUBSTRING(CELLPHONE,4,3),' ',SUBSTRING(CELLPHONE,7,2) ,' ',SUBSTRING(CELLPHONE,9,2) )

    You can always get help from

    https://msdn.microsoft.com/en-us/library/hh213505.aspx

    0 讨论(0)
  • 2020-12-06 00:15

    I found that this works if wanting in a (123) - 456-7890 format.

    UPDATE table 
    SET Phone_number =  '(' +  
                        SUBSTRING(Phone_number, 1, 3) 
                        + ') ' 
                        + '- ' +
                        SUBSTRING(Phone_number, 4, 3) 
                        + '-' +
                        SUBSTRING(Phone_number, 7, 4) 
    
    0 讨论(0)
提交回复
热议问题