以非美国格式格式化 Phone 个数字

Formatting Phone Numbers in Non-US format

我有以下代码,我正在尝试重构以按照我需要的格式格式化 phone 数字字段:

STUFF(STUFF(STUFF(REPLACE('02 212345678','02 2','02 '), 7, 0, ' '), 3, 0, ') '), 1, 0, '(') 

目前returns的数据是这样的:

(02)  123 45678

我需要这种格式的地方

(02) 1234 5678

问题是右括号后的额外 space 并且两边都有 4 个数字。

根据您的示例,以下方法是否适合您?

with sampledata as (select '02 212345678' num)

select Concat(Stuff('() ',2,0,Left(num,2)), Stuff(Right(num,8),5,0,' '))
from sampledata

您现有的代码可以工作,只需将 7 更改为 8,但我更喜欢将格式和数据分开。代码更易于阅读和修改:

DECLARE @PhoneNumber varchar(20) = '02 212345678';

SELECT FORMATMESSAGE('(%s) %s %s', LEFT(@PhoneNumber, 2), SUBSTRING(@PhoneNumber, 4, 4), SUBSTRING(@PhoneNumber, 8, 4) );