2013-10-12 29 views
0

我在db中有一個字符串值。我需要在每3個字符之間插入一個,。這是示例字符串。在Sql Server中分成3個字符

樣品字符串

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

結果

Val = 111,100,120,125 

請告訴我內建SqlServer的函數來獲取,分隔字符串作爲結果。

任何幫助,將不勝感激。

謝謝。

+0

難道只是一個字符串變量或表字段?並且在字段/變量中是否有最大可能的長度? – Kaf

+0

我認爲最好的方法是創建一個CLR UDF--除非可能的值是非常窄的範圍。 –

+0

它的一個表值和它的varchar(200)類型。 – DonMax

回答

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; 
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; 

用法fiddle demo

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 | 
+0

字符串「111100120125」可以是動態的。所以我想知道字符串分離的動態級別。 – DonMax