我想创建一个标量函数,它可以按如下方式格式化电话号码: 我有:
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: - )
我已经拥有该功能的主体,只需要一个建筑的帮助。 任何提示都会受到质疑。
答案 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;