La soluzione è semplice:
- dividi i valori per
\s
(spazio) preservando l'ordine degli elementi - Ruota il risultato
- estrai solo numeri o solo lettere dalla colonna specifica
Per dividere i valori puoi usare XML
come questo
. Per estrarre solo numeri puoi eseguire una catena di REPLACE
s rimuovere tutte le unità. Per rimuovere i numeri e lasciare il testo, puoi utilizzare REPLACE
s di nuovo.
Nel mio ambiente, sto usando molte funzioni SQL CLR e la soluzione è simile a questa:
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;
Puoi controllare questo rispondere per ottenere tali funzioni anche nel tuo ambiente.
Nel tuo caso, sarà più facile e sicuro utilizzare XML per dividere i dati e sostituirli per dare forma ai risultati.