我有一个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%'
是否可以仅使用单选查询来执行此操作,以便不需要首先更新数据? 任何形式的帮助或建议将不胜感激。
答案 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));