sql >> Database teknologi >  >> Database Tools >> SSMS

Opdel en enkelt feltværdi i flere kolonneværdier med fast længde i T-SQL

Som du er .net udvikler Jeg gætter på, at det vil være nemt for dig at skrive en .net funktion, som du kan bruge i din T-SQL kode. For at skrive SQL CLR funktioner check dette svar (Jeg har brugt et af linkene til at implementere SQL CLR regex funktion.

Lad os sige, at du skal opdele værdierne i 4-længde bidder og vise maksimalt 6 af dem:

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;

Nu er dataene opdelt. Lad os pivot det og vis kun 6 af bidderne:

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;

Her bruger jeg regex funktion til at opdele data og PIVOT at oprette kolonner og udelukke nogle af bidderne. Du kan nu indsætte dataene i tabellen for at materialisere dem og derefter eksportere dem. Du kan implementere en sådan funktion ved at bruge linket ovenfor eller oprette din egen funktion ved at gøre noget, du har brug for.



  1. SQL Server ISNUMERIC() afklaring

  2. Begræns tilmelding til 4 personer på formularen tilmelding

  3. phpmyadmin|Sådan opretter du en begivenhed skal du udføre 2 handlinger

  4. hvordan man fjernadgang til phpmyadmin