SSMS
 sql >> Base de données >  >> Database Tools >> SSMS

Fractionner une valeur de champ unique en plusieurs valeurs de colonne de longueur fixe dans T-SQL

Comme vous êtes .net développeur, je suppose qu'il vous sera facile d'écrire un .net fonction que vous pouvez utiliser dans votre T-SQL code. Pour écrire SQL CLR fonctions vérifier cette réponse (J'ai utilisé l'un des liens pour implémenter SQL CLR fonction régulière.

Supposons que vous deviez diviser les valeurs en blocs de 4 longueurs et en afficher 6 au maximum :

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;

Maintenant, les données sont divisées. Faisons pivot et affichez seulement 6 des morceaux :

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;

Ici, j'utilise regex fonction pour diviser les données et PIVOT pour créer des colonnes et exclure certains des morceaux. Vous pouvez maintenant insérer les données dans le tableau afin de les matérialiser puis de les exporter. Vous pouvez implémenter une telle fonction en utilisant le lien ci-dessus ou créer votre propre fonction en faisant quelque chose dont vous avez besoin.