La solución es fácil:
- dividir los valores por
\s
(espacio) preservando el orden de los elementos - girar el resultado
- extraer solo números o solo letras de la columna específica
Para dividir los valores, puede usar XML
como esto
. Para extraer solo números, puede realizar una cadena de REPLACE
s eliminando todas las unidades. Para eliminar los números y dejar el texto, puede usar REPLACE
s de nuevo.
En mi entorno, estoy usando muchas funciones SQL CLR y la solución se ve así:
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;
Puedes consultar esto respuesta para obtener tales funciones en su entorno, también.
En su caso, será más fácil y seguro usar XML para dividir los datos y reemplazarlos para dar forma a los resultados.