如何在 T-SQL 中每隔 X 个字符在长信用卡号中插入空格?

How to insert Spaces in long Credit Card Number every X characters in T-SQL?

我好像有点失误...

如何将连续的信用卡号格式化为T-SQL中每4位数字后有空白space?

TableName     | Cards                    |
ColumnName    | CardNumber               |
ExampleInput  | 80756201005803400471     | varchar(20)

ExampleOutput | 8075 6201 0058 0340 0471 | varchar(25)

我希望在 SELECT 语句中包含 ExampleOutput,性能无关紧要。

像这样:

select stuff(stuff(stuff(stuff(ccn, 17, 0, ' '), 13, 0, ' '), 9, 0, ' '), 5, 0, ' ')

即嵌套调用到stuff()。注意:您需要从字符串的末尾开始,否则要非常小心偏移量。

如果长度是固定的,就像这样:

Select *
    , SUBSTRING(n, 1, 4) + ' ' 
     + SUBSTRING(n, 5, 4) + ' '
     + SUBSTRING(n, 9, 4) + ' '
     + SUBSTRING(n, 13, 4) + ' '
     + SUBSTRING(n, 17, 4) + ' '
From (values('80756201005803400471')) as car(n)

只是使用 LEFTSUBSTRING 的另一个视角。

查询

declare @num as varchar(50)
set @num = '80756201005803400471'

select left(@num,4) 
    + ' ' 
    + substring(@num,5,4) 
    + ' '
    + substring(@num,9,4) 
    + ' '
    +substring(@num,13,4) 
    + ' '
    +substring(@num,17,4);

并且还可以使用 RIGHT 函数代替最后一个 SUBSTRING

查询

declare @num as varchar(50)
set @num = '80756201005803400471'

select left(@num,4) 
    + ' ' 
    + substring(@num,5,4) 
    + ' '
    + substring(@num,9,4) 
    + ' '
    +substring(@num,13,4) 
    + ' '
    +right(@num,4);