Rozwiązanie jest proste:
- podziel wartości przez
\s
(spacja) zachowywanie kolejności elementów - obróć wynik
- wyodrębnij tylko cyfry lub tylko litery z określonej kolumny
Aby podzielić wartości, możesz użyć XML
jak to
. Aby wyodrębnić tylko liczby, możesz wykonać łańcuch REPLACE
s usunięcie wszystkich jednostek. Aby usunąć cyfry i zostawić tekst, możesz użyć REPLACE
s ponownie.
W moim środowisku używam wielu funkcji SQL CLR, a rozwiązanie wygląda tak:
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;
Możesz sprawdzić to odpowiedź, aby uzyskać takie funkcje również w swoim środowisku.
W Twoim przypadku łatwiej i bezpieczniej będzie używać XML do dzielenia danych i zastępowania ich w celu kształtowania wyników.