De oplossing is eenvoudig:
- verdeel de waarden door
\s
(spatie) volgorde van elementen behouden - draai het resultaat
- extraheer alleen cijfers of alleen letters uit de specifieke kolom
Om de waarden te splitsen kunt u XML
. gebruiken vind dit
leuk . Om alleen getallen te extraheren, kunt u een reeks REPLACE
. uitvoeren s het verwijderen van alle eenheden. Om de cijfers te verwijderen en de tekst te laten staan, kunt u REPLACE
. gebruiken s weer.
In mijn omgeving gebruik ik veel SQL CLR-functies en de oplossing ziet er als volgt uit:
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;
Je kunt dit controleren antwoord om dergelijke functies ook in uw omgeving te krijgen.
In uw geval is het gemakkelijker en veiliger om XML te gebruiken om de gegevens te splitsen en te vervangen om de resultaten vorm te geven.