A solução é fácil:
- dividir os valores por
\s
(espaço) preservando a ordem dos elementos - girar o resultado
- 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.