Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como dividir o campo de dados do símbolo na tabela temporária para 5 colunas?


A solução é fácil:
  1. dividir os valores por \s (espaço) preservando a ordem dos elementos
  2. girar o resultado
  3. extrair apenas números ou apenas letras da coluna específica

Para dividir os valores você pode usar XML como este . Para extrair apenas números, você pode executar uma cadeia de REPLACE s removendo todas as unidades. Para remover os números e deixar o texto, você pode usar REPLACE s novamente.

No meu ambiente, estou usando muitas funções SQL CLR e a solução se parece com isso:
SELECT PVT.id
      ,PVT.symbolData
      ,dbo.fn_Utils_RegexReplace ([0], '[^\d+]', '') AS [valuebefore]
      ,dbo.fn_Utils_RegexReplace ([0], '\d+', '') AS [unitbefore]
      ,[1] AS [symbole]
      ,dbo.fn_Utils_RegexReplace ([2], '[^\d+\.]', '') AS [valueafter]
      ,dbo.fn_Utils_RegexReplace ([2], '[\d+\.]', '') AS [unitafter]
FROM #TEMP
CROSS APPLY dbo.fn_Utils_RegexSplitWithOrder (SymbolData, '\s') RS
PIVOT
(
    MAX([value]) FOR [index] IN ([0], [1], [2])
) PVT
ORDER BY PVT.id;



Você pode verificar este answer para obter essas funções em seu ambiente também.

No seu caso, será mais fácil e seguro usar XML para dividir os dados e substituir para moldar os resultados.