sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo dividir el campo de datos del símbolo en la tabla temporal en 5 columnas?

La solución es fácil:

  1. dividir los valores por \s (espacio) preservando el orden de los elementos
  2. girar el resultado
  3. 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.