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

Dela upp ett enstaka fältvärde i flera kolumnvärden med fast längd i T-SQL

Eftersom du är .net utvecklare Jag antar att det blir lätt för dig att skriva en .net funktion som du kan använda i din T-SQL koda. För att skriva SQL CLR funktioner kontrollera det här svaret (Jag har använt en av länkarna för att implementera SQL CLR regex-funktion.

Låt oss säga att du måste dela upp värdena i fyra långa bitar och visa maximalt sex av 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 är uppgifterna delade. Låt oss pivot det och visa bara 6 av bitarna:

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;

Här använder jag regex funktion för att dela upp data och PIVOT för att skapa kolumner och utesluta några av bitarna. Du kan nu infoga data i tabellen för att materialisera den och sedan exportera den. Du kan implementera en sådan funktion genom att använda länken ovan eller skapa din egen funktion som gör något du behöver.



  1. importera en databas till phpmyadmin #1044 - Åtkomst nekad för användaren

  2. 'DATE' är inte ett känt inbyggt funktionsnamn

  3. Hur man lägger till ytterligare ett fält i en befintlig tabell i mysql

  4. Inga UI-dialoger i MS Azure / SQL Server Management Studio