SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

Dividir um valor de campo único em vários valores de coluna de comprimento fixo no T-SQL


Como você é .net desenvolvedor, acho que será fácil para você escrever um .net função que você pode usar em seu T-SQL código. Para escrever SQL CLR funções verifique esta resposta (Eu usei um dos links para implementar SQL CLR função regex.

Digamos que você precise dividir os valores em pedaços de 4 comprimentos e mostrar no máximo 6 deles:
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;



Agora os dados são divididos. Vamos pivot e mostre apenas 6 dos pedaços:
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;



Aqui eu uso regex função para dividir os dados e PIVOT para criar colunas e excluir alguns dos pedaços. Agora você pode inserir os dados na tabela para materializá-los e depois exportá-los. Você pode implementar tal função usando o link acima ou criar sua própria função fazendo algo que você precisa.