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

时间:2017-11-24 08:03:04

标签: sql sql-server sql-server-2016

我想创建一个标量函数,它可以按如下方式格式化电话号码: 我有:

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

- 适用于一个(第一个)电话号码,而不是String_Split: - )

我已经拥有该功能的主体,只需要一个建筑的帮助。 任何提示都会受到质疑。

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果每行总有一个数字,那么您可以使用stuff()功能&在每三位数差距后添加单个空格

SELECT STUFF(STUFF(STUFF(concat('+420', @phone), 5, 0, SPACE(1)), 9, 0, SPACE(1)), 13, 0, SPACE(1));

答案 2 :(得分:0)

我不知道您正在使用哪个版本的SQL Server,但这应该适用于所有这些版本(假设数字的实际格式不会改变):< / p>

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

这取决于您在列中最多只列出两个电话号码,用逗号分隔。如果你有更多,那么它将需要重新加工。

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

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

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

答案 3 :(得分:0)

根据你的comment

,你可以去
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;