Решението е лесно:
- разделете стойностите по
\s
(интервал) запазване на реда на елементите - завъртете резултата
- извлечете само цифри или само букви от конкретната колона
За да разделите стойностите, можете да използвате XML
като това
. За да извлечете само числа, можете да извършите верига от REPLACE
s премахване на всички единици. За да премахнете числата и да оставите текста, можете да използвате REPLACE
s отново.
В моята среда използвам много SQL CLR функции и решението изглежда така:
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;
Можете да проверите това отговор, за да получите такива функции и във вашата среда.
Във вашия случай ще бъде по-лесно и по-безопасно да използвате XML за разделяне на данните и замяна за оформяне на резултатите.