2016-09-21 5 views
0

Irgendeine Idee, wie ich eine lange Zeichenfolge in mehrere Datensätze mit einer festen Breite von jeweils 4 Zeichen und ohne Trennzeichen teilen kann?Text in 4 Zeichen ohne Trennzeichen aufteilen

Zum Beispiel:

Quelle:

1 11223344 
2 ABCD 
3 XYZ12345 

Erwartetes Ergebnis:

1 1122 
1 3344 
2 ABCD 
3 XYZ1 
3 2345 

Die lange Textzeichenfolge wird derzeit in einer Spalte einer Tabelle. Mein Endergebnis ist, die ersten 4 Zeichen davon in eine Aufzeichnung zu bringen, die nächsten 4 Zeichen in die andere Aufzeichnung und so weiter und so fort. Ich muss auch einen Bezeichner haben, um zu sagen, dass die erste X Anzahl der Datensätze zum ersten Datensatz der Quelldatei usw. gehören (im obigen Beispiel ist es die erste Spalte - 1, 2, 3)

+0

ist die 'eine lange Reihe von Text in mehrere Records' in einem Feld einer Tabelle? oder mehrere Felder, Tabellen? –

+0

Die lange Textzeile befindet sich derzeit in einer Spalte einer Tabelle. Mein Endergebnis ist, die ersten 4 Zeichen davon in einen Datensatz zu schreiben, die nächsten 4 Zeichen in den anderen Datensatz und so weiter und so fort. Ich muss auch eine Kennung haben, um zu sagen, dass die erste X-Nummer des Datensatzes zum ersten Datensatz der Quelldatei usw. gehört (im obigen Beispiel ist es die erste Spalte - 1,2,3). – user1688194

+0

Sie haben kein Trennzeichen in Ihrer 'source?' Ich denke, wenn Sie Quelle so ist '1 11223344' das Trennzeichen ist das' Tab' –

Antwort

0

Folgen Sie den Anweisungen unter den Schritten.

  1. Erstellen Sie eine Funktion zum Teilen Ihrer Daten nach Zeichenlänge.

    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. Aufruf der Funktion von Ihrer Spalte und Länge von Zeichen als Eingabe wie unten vorbei.

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

Ausgang: enter image description here

1

Verwenden Sie diese Abfragen für gewünschte Ausgabe:

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

rekursive CTE können Ihnen helfen:

;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 

Ausgang:

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