La solution est simple :
- diviser les valeurs par
\s
(espace) préservation de l'ordre des éléments - faire pivoter le résultat
- extraire uniquement des chiffres ou uniquement des lettres de la colonne spécifique
Afin de diviser les valeurs, vous pouvez utiliser XML
comme ceci
. Afin d'extraire uniquement des nombres, vous pouvez effectuer une chaîne de REPLACE
s suppression de toutes les unités. Pour supprimer les chiffres et laisser le texte, vous pouvez utiliser REPLACE
à nouveau.
Dans mon environnement, j'utilise beaucoup de fonctions SQL CLR et la solution ressemble à ceci :
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;
Vous pouvez vérifier ceci réponse pour obtenir de telles fonctions dans votre environnement également.
Dans votre cas, il sera plus facile et plus sûr d'utiliser XML pour diviser les données et les remplacer pour façonner les résultats.