Řešení je snadné:
- rozdělte hodnoty podle
\s
(mezera) zachování pořadí prvků - otočte výsledek
- z konkrétního sloupce extrahujte pouze čísla nebo pouze písmena
K rozdělení hodnot můžete použít XML
jako toto
. Chcete-li extrahovat pouze čísla, můžete provést řetězec REPLACE
s odstraněním všech jednotek. Chcete-li odstranit čísla a ponechat text, můžete použít REPLACE
znovu s.
V mém prostředí používám mnoho funkcí SQL CLR a řešení vypadá takto:
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;
Můžete zkontrolovat toto odpověď, abyste získali takové funkce i ve svém prostředí.
Ve vašem případě bude snazší a bezpečnější použít XML k rozdělení dat a nahrazení pro tvarování výsledků.