删除前两位数字并更改电话号码格式SQL
我有一个表格,其中PhoneNumber列的值类似于911234567891。 我想删除开头的前两位数字,即123456781,然后我想将其更改为电话号码格式xxx xxx xxxx,以便最终结果为123-456-7891。 我已经使用seprate Select和Update查询完成了如下操作:删除前两位数字并更改电话号码格式SQL,sql,sql-server,ssms,Sql,Sql Server,Ssms,我有一个表格,其中PhoneNumber列的值类似于911234567891。 我想删除开头的前两位数字,即123456781,然后我想将其更改为电话号码格式xxx xxx xxxx,以便最终结果为123-456-7891。 我已经使用seprate Select和Update查询完成了如下操作: SELECT [Phone Numbers] ,FORMAT([Phone Numbers],'###-###-####') AS [Formatted Phone] FRO
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%'
是否可以只使用单选查询,这样就不需要首先更新数据?
任何形式的帮助或建议都将不胜感激 这就是你要找的吗
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));
如果列的长度始终是固定的,则可以使用子字符串执行此操作
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%'
如果列[电话号码]是数字类别数据类型,则使用格式
UPDATE tbl_sample
SET [Phone Numbers] = FORMAT([Phone Numbers]-910000000000,'###-###-####')
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%'
看起来格式化的第一个参数不能是@vkp的varchar。你当然是对的。我修正了答案。您可能需要检查值的长度,而不是91%。当长度只有10个字符,区号是913时会发生什么?如果这永远不会用于另一个地区,那么就可以了。虽然实际更改表中的数据使得未来可能添加亚洲、欧洲、南美等国家的电话号码非常具有挑战性。您已经非常接近我真正想要做的事情了。实际上,我想根据格式化为“-”后返回的电话号码从tableA更新TableB。是的,这就是我需要的。谢谢
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%'