Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie teilt man das Symboldatenfeld in der temporären Tabelle in 5 Spalten auf?

Die Lösung ist einfach:

  1. Teilen Sie die Werte durch \s auf (Leerzeichen) Beibehaltung der Reihenfolge der Elemente
  2. Pivotieren Sie das Ergebnis
  3. nur Zahlen oder nur Buchstaben aus der bestimmten Spalte extrahieren

Um die Werte aufzuteilen, können Sie XML verwenden wie dies . Um nur Zahlen zu extrahieren, können Sie eine Kette von REPLACE ausführen s Entfernen aller Einheiten. Um die Zahlen zu entfernen und den Text zu belassen, können Sie REPLACE verwenden s wieder.

In meiner Umgebung verwende ich viele SQL CLR-Funktionen und die Lösung sieht folgendermaßen aus:

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;

Sie können dies überprüfen antworten, um solche Funktionen auch in Ihrer Umgebung zu erhalten.

In Ihrem Fall ist es einfacher und sicherer, XML zu verwenden, um die Daten aufzuteilen und zu ersetzen, um die Ergebnisse zu formen.