2016-09-21 158 views
0

關於如何將一長串文本分割成多個固定寬度爲4個字符且沒有分隔符的記錄的任何想法?將文本分割爲4個字符(不帶分隔符)

例如:

來源:

1 11223344 
2 ABCD 
3 XYZ12345 

預期結果:

1 1122 
1 3344 
2 ABCD 
3 XYZ1 
3 2345 

文本的長字符串是當前在表中的一列。我最終的結果是把它的前4個字符放到一個記錄中,將下一個4個字符放到另一個記錄中,依此類推。我還需要有一個標識符來告訴第一個X數量的記錄屬於源文件的第一個記錄等(在上例中,它是第一列 - 1,2,3)

+0

是'長字符串文本分成多個records'在一個表中的一個字段?或多個字段,表? –

+0

長串文字當前在表格的一列中。我的最終結果是將它的前4個字符放到一個記錄中,將下一個4個字符放到另一個記錄中,依此類推。我還需要有一個標識符來說明第一個X數量的記錄屬於源文件的第一個記錄等(在上面的例子中,它是第一列--1,2,3)。 – user1688194

+0

你的源代碼中沒有分隔符?我認爲如果你的源代碼是'1 11223344'分隔符是'Tab' –

回答

0

請按照下面的步驟。

  1. 創建一個按字符長度拆分數據的函數。

    CREATE FUNCTION SplitStringByLength 
    ( 
    @inputString varchar(max), 
    @length int 
    ) 
    RETURNS @SplitStrings TABLE(SplitString VARCHAR(50)) 
    AS 
    BEGIN 
        DECLARE @s VARCHAR(50) 
        WHILE len(@inputString) > 0 
        BEGIN 
         SET @s = left(@inputString, @length) 
         SET @inputString = right(@inputString, len(@inputString) - @length) 
         INSERT @SplitStrings VALUES (@s) 
        END 
    RETURN 
    END 
    
  2. 通過傳遞您的列和字符的長度作爲輸入如下所示調用函數。

    SELECT ID ,SplitString 
    FROM YourTable 
        CROSS APPLY 
        dbo.SplitStringByLength (YourColumn,4)-- mention the character length to split 
    

輸出: enter image description here

1

使用此查詢爲所需的輸出:

Select substring('11223344',0,5) 
Select substring('11223344',5,9) 
Select substring('ABCD',0,5) 
------Select substring('ABCD',5,9) 
Select substring('XYZ12345',0,5) 
Select substring('XYZ12345',5,9) 
0

遞歸CTE可以幫助你:

;WITH cte AS (
SELECT ID, 
     CAST(SUBSTRING(string,1,4) as nvarchar(4))as S, 
     LEN(String) as L, 
     1 as [Level] 
FROM YourTable 
UNION ALL 
SELECT y.ID, 
     CAST(SUBSTRING(string,(4*[Level])+1,(4*[Level])+4) as nvarchar(4)), 
     L-4, 
     [Level]+1 
FROM YourTable y 
INNER JOIN cte c 
    ON y.ID = c.ID 
WHERE L > 4 
) 

SELECT ID, 
     S 
FROM cte 
ORDER BY ID 

輸出:

ID S 
1 1122 
1 3344 
2 ABCD 
3 XYZ1 
3 2345