如何将电话号码转换为给定格式



我想创建一个标量函数,该函数将以以下方式格式化电话号码:我有:

Phone
----------  
606548795, 112556884  
777090811
606721568

我想要:

Phone
> --------
> +420 606 548 795, +420 112 556 884
> +420 777 090 811
> +420 606 721 568

我尝试了:

SELECT @String FROM STRING_SPLIT(@String, ',')
    IF(@CountryID = 1)
       BEGIN
          IF(SUBSTRING(@String,1,9) LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%')
             RETURN CONCAT(@CountryCode, ' ', SUBSTRING(@String,1,3), ' ', SUBSTRING(@String,4,3), ' ', SUBSTRING(@String,7,3))
          ELSE
             RETURN ''
       END

- 适用于一个(第一个)电话号码withou attring_split: - )

我已经拥有该功能的主体,只需要在构造方面提供帮助即可。任何提示都将被授予。

格式SQL Server(从2012年开始)https://learn.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql

SELECT FORMAT(606548795,'+420 000 000 000')

如果您每行总是一个数字,则可以使用stuff()函数&每三个数字差距

添加单个空间
SELECT STUFF(STUFF(STUFF(concat('+420', @phone), 5, 0, SPACE(1)), 9, 0, SPACE(1)), 13, 0, SPACE(1));

我不知道您正在使用哪个版本的SQL Server,但这几乎应该在所有版本中起作用(假设数字的实际格式不会更改):

DECLARE @TABLE TABLE 
(
    PhoneNos    VARCHAR(255)
)
;
INSERT INTO @TABLE 
SELECT '606548795, 112556884'
    UNION ALL
SELECT '777090811'
    UNION ALL 
SELECT '606721568'
;
SELECT
    CASE
        WHEN CHARINDEX(',',PhoneNos) > 1
            THEN 
                '+420 ' + STUFF(STUFF(LEFT(PhoneNos,9),4,0,' '),8,0,' ')
                + ', ' +
                '+420' + STUFF(STUFF(RIGHT(PhoneNos,CHARINDEX(',',REVERSE(PhoneNos)) - 1),5,0,' '),9,0,' ')
        ELSE
            '+420 ' + STUFF(STUFF(PhoneNos,4,0,' '),8,0,' ')
    END
FROM @TABLE T
;

返回:

+420 606 548 795, +420 112 556 884
+420 777 090 811
+420 606 721 568

这取决于以下事实:您只有列中列出的两个电话号码,并由逗号隔开。如果您有更多,那么它将需要重新设计。

另外,我只想提到,在单列中存储多个值有点不,这是因为这样的事情。

您可以使用单独的函数将逗号分隔的值分为临时表中的单个条目,然后在这些条目上运行单值函数,以获得更好,更稳定的结果。

如果您感兴趣,请告诉我,我可以为您工作。

根据您的评论:

CREATE TABLE PhoneNumber (
    Phone VARCHAR(MAX)
    );
INSERT INTO PhoneNumber VALUES
('606548795, 112556884'),  
('777090811'),
('606721568');
SELECT Phone, CASE WHEN LEN(Phone) > 9 THEN '+420 ' + LEFT(Phone, 9) + ' , +420 ' + RIGHT(Phone, 9)
              ELSE '+420 '+ LEFT(Phone, 9) END AS Result
FROM PhoneNumber;

这是基于您具有最大的。一排数字:

declare @x table(COLUMN_NAME varchar(30))
insert into @x values
('606548795, 112556884'),  
('777090811'),
('606721568');
declare @prefix varchar(5)
set @prefix = '+420 '
SELECT case when CHARINDEX(',', COLUMN_NAME) = 0 then @prefix + FORMAT(convert(int,COLUMN_NAME), '000 000 000')
            else @prefix + format(convert(int,substring(COLUMN_NAME, 1, charindex(',',COLUMN_NAME) - 1)),'000 000 000') + ', ' + @prefix +
                 format(convert(int,substring(COLUMN_NAME, charindex(',',COLUMN_NAME) + 2, LEN(COLUMN_NAME))),'000 000 000')
       end
FROM @x

最新更新