Løsningen er nem:
- opdel værdierne med
\s
(mellemrum) bevarer rækkefølgen af elementer - pivot resultatet
- udtræk kun tal eller kun bogstaver fra den specifikke kolonne
For at opdele værdierne kan du bruge XML
synes godt om dette
. For kun at udtrække tal kan du udføre en kæde af REPLACE
s fjerne alle enheder. For at fjerne tallene og forlade teksten, kan du bruge REPLACE
s igen.
I mit miljø bruger jeg mange SQL CLR-funktioner, og løsningen ser således ud:
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;
Du kan tjekke dette svar for også at få sådanne funktioner i dit miljø.
I dit tilfælde vil det være nemmere og sikrere at bruge XML til at opdele dataene og erstatte dem for at forme resultaterne.