删除前两位数并更改phonenumber格式SQL

时间:2016-06-10 15:49:39

标签: sql sql-server ssms

我有一个tableA,其中PhoneNumber列的值为911234567891。 我想从开始删除前两位数字,即1234567891,然后我想将其更改为电话号码格式xxx-xxx-xxxx,因此最终结果将是123-456-7891。 我已经使用seprate选择和更新查询这样做了:

SELECT
     [Phone Numbers]
    ,FORMAT([Phone Numbers],'###-###-####') AS [Formatted Phone]
    FROM tbl_sample


UPDATE tbl_sample
SET    [Phone Numbers] = SUBSTRING([Phone Numbers], 3, 8000) 
WHERE [Phone Numbers] LIKE '91%'

是否可以仅使用单选查询来执行此操作,以便不需要首先更新数据? 任何形式的帮助或建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果列的长度始终固定,则使用SUBSTRING执行此操作的一种方法。

UPDATE tbl_sample
SET [Phone Numbers] = SUBSTRING([Phone Numbers], 3, 3) + '-'+
                      SUBSTRING([Phone Numbers], 6, 3) + '-'+
                      SUBSTRING([Phone Numbers], 9, 4)
WHERE [Phone Numbers] LIKE '91%'

如果列FORMAT是数字类别数据类型,则使用[Phone Numbers]

UPDATE tbl_sample
SET [Phone Numbers] = FORMAT([Phone Numbers]-910000000000,'###-###-####')
WHERE [Phone Numbers] LIKE '91%'

如果您只需要select

SELECT [Phone Numbers],
FORMAT([Phone Numbers]-910000000000,'###-###-####') formatted_number
--if [Phone Numbers] is varchar use
--FORMAT(cast([Phone Numbers] as numeric)-910000000000,'###-###-####')
FROM tbl_sample
WHERE [Phone Numbers] LIKE '91%'

编辑:使用格式化的电话号码更新其他表格

UPDATE tb
SET tb.[Phone Numbers] = FORMAT(ta.[Phone Numbers]-910000000000,'###-###-####')
FROM tableA ta
JOIN tableB tb on ta.id = tb.id --change the join condition appropriately
WHERE tb.[Phone Numbers] LIKE '91%'

答案 1 :(得分:0)

这是你在找什么?

UPDATE tbl_sample
    SET [Phone Numbers] = FORMAT(SUBSTRING([Phone Numbers], 3, 8000), '###-###-####') 
    WHERE [Phone Numbers] LIKE '91%';

或者,或者,

select (case when [Phone Numbers] LIKE '91%'
             then FORMAT(CASt(SUBSTRING([Phone Numbers], 3, 8000) as bigint), '###-###-####') 
             else [Phone Numbers]
        end)
from tbl_sample;

或者,在SQL Server中,您可以添加计算列:

alter table tbl_sample
    add Formatted_Phone_Number as (
        case when [Phone Numbers] LIKE '91%'
             then FORMAT(CASt(SUBSTRING([Phone Numbers], 3, 8000) as bigint), '###-###-####') 
             else [Phone Numbers]
        end));