SSMS
 sql >> Datenbank >  >> Database Tools >> SSMS

Aufteilen eines einzelnen Feldwerts in mehrere Spaltenwerte mit fester Länge in T-SQL

So wie Sie .net sind Entwickler Ich schätze, es wird Ihnen leicht fallen, ein .net zu schreiben Funktion, die Sie in Ihrem T-SQL verwenden können Code. Um SQL CLR zu schreiben Funktionen überprüfen Sie diese Antwort (Ich habe einen der Links verwendet, um SQL CLR zu implementieren Regex-Funktion.

Angenommen, Sie müssen die Werte in 4-teilige Abschnitte aufteilen und maximal 6 davon anzeigen:

DECLARE @DataSouce TABLE
(
    [RecordID] TINYINT IDENTITY(1,1) PRIMARY KEY
   ,[RecordData] NVARCHAR(MAX)
);

INSERT INTO @DataSouce ([RecordData])
VALUES ('test some test goes here')
      ,('some numbers go here - 1111122222233333344444444445');


SELECT DS.[RecordID]
      ,RM.[MatchID]
      ,RM.[CaptureValue]
FROM @DataSouce DS
CROSS APPLY [dbo].[fn_Utils_RegexMatches] ([RecordData], '.{1,4}') RM;

Jetzt werden die Daten aufgeteilt. Lassen Sie uns pivot es und zeigen nur 6 der Chunks:

SELECT *
FROM
(
    SELECT DS.[RecordID]
          ,RM.[MatchID]
          ,RM.[CaptureValue]
    FROM @DataSouce DS
    CROSS APPLY [dbo].[fn_Utils_RegexMatches] ([RecordData], '.{1,4}') RM
) DS
PIVOT
(
    MAX([CaptureValue]) FOR [MatchID] IN ([0], [1], [2], [3], [4], [5], [6])
) PVT;

Hier verwende ich regex Funktion zum Teilen der Daten und PIVOT um Spalten zu erstellen und einige der Chunks auszuschließen. Sie können jetzt die Daten in die Tabelle einfügen, um sie zu materialisieren und dann zu exportieren. Sie können eine solche Funktion über den obigen Link implementieren oder Ihre eigene Funktion erstellen, um etwas zu tun, was Sie brauchen.