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

Splits een enkele veldwaarde in meerdere kolomwaarden met vaste lengte in T-SQL

Zoals je bent .net ontwikkelaar Ik denk dat het gemakkelijk voor je zal zijn om een ​​.net . te schrijven functie die u kunt gebruiken in uw T-SQL code. Om SQL CLR te schrijven functies check dit antwoord (Ik heb een van de links gebruikt om SQL CLR te implementeren regex-functie.

Laten we zeggen dat je de waarden moet splitsen in stukken van 4 lengtes en er maximaal 6 moet tonen:

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 zijn de gegevens gesplitst. Laten we pivot het en laat slechts 6 van de chunks zien:

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 gebruik ik regex functie om de gegevens te splitsen en PIVOT om kolommen te maken en enkele chunks uit te sluiten. U kunt nu de gegevens in de tabel invoegen om deze te materialiseren en vervolgens exporteren. Je kunt een dergelijke functie implementeren met behulp van de bovenstaande link of je eigen functie maken door iets te doen wat je nodig hebt.



  1. Databases migreren met behulp van het trackingmechanisme van phpMyAdmin

  2. PHP installeren met Homebrew op MAC

  3. Genereer CSV op basis van MySQL-query van phpMyAdmin

  4. wamp phpmyadmin scripts/setup.php niet gevonden, maar is er wel