0

我在数据库中有一个字符串值。我需要,在每 3 个字符之间插入一个。这是示例字符串。

示例字符串

111100120125     // This sample is a dynamic string. So It can be less or more ..

结果

Val = 111,100,120,125

请告诉我有关用于获取,分隔字符串的内置 SqlServer 函数的信息。

对此的任何帮助将不胜感激。

谢谢。

4

2 回答 2

1

请告诉我有关用于获取分隔字符串的内置 SqlServer 函数的信息。

您可以使用Stuff()函数。特定于您给定字符串的小提琴演示。

Declare @S varchar(50) = '111100120125'

SELECT STUFF(STUFF(STUFF(@S,4,0,','),8,0,','),12,0,',')

111,100,120,125

编辑:更通用的解决方案是创建一个如下所示的函数(请注意,此函数从末尾开始插入分隔符值):

CREATE FUNCTION dbo.AddSeparator (@String VARCHAR(max), @Separator VARCHAR(1))
RETURNS VARCHAR(max)
AS
BEGIN

    Declare @Length int = Len(@String)
    WHILE (@Length > 3)
    BEGIN
    SELECT @String = STUFF(@String, @Length - 2, 0, @Separator),
           @Length = @Length -3
    END

    RETURN @String
END;

用法和小提琴演示

SELECT String Original, dbo.AddSeparator(String, ',') Modified
FROM T

结果:

| ORIGINAL |  MODIFIED |
|----------|-----------|
|          |           |
|        1 |         1 |
|       12 |        12 |
|      123 |       123 |
|     1234 |     1,234 |
|    12345 |    12,345 |
|   123456 |   123,456 |
|  1234567 | 1,234,567 |
于 2013-10-12T11:40:35.853 回答
0

您可以使用递归 CTE:

declare @f varchar(100)='111100120125'
;with pos as(
select 3 n, cast(SUBSTRING(@f,1,3) as varchar(max)) a
union all
select n+3 n, a+','+ SUBSTRING(@f,n+1,3) from pos
where n<LEN(@f)
)
select max(@f) ini, max(a) res from pos; 
于 2013-10-12T18:24:53.837 回答