Si la partie numérique est toujours au début, alors vous pouvez utiliser ceci :
PATINDEX('%[0-9][^0-9]%', ConcUnit)
pour obtenir l'indice du dernier chiffre.
Ainsi, ceci :
DECLARE @str VARCHAR(MAX) = '4000 ug/ML'
SELECT LEFT(@str, PATINDEX('%[0-9][^0-9]%', @str )) AS Number,
LTRIM(RIGHT(@str, LEN(@str) - PATINDEX('%[0-9][^0-9]%', @str ))) As Unit
vous donne :
Number Unit
-------------
4000 ug/ML
MODIF :
Si les données numériques incluent également des valeurs doubles, vous pouvez utiliser ceci :
SELECT LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))
pour obtenir l'indice du dernier chiffre .
Ainsi, ceci :
SELECT LEFT(@str, LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str)))
vous donne la partie numérique.
Et ceci :
SELECT LEFT(@str, LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))) AS Numeric,
CASE
WHEN CHARINDEX ('%', @str) <> 0 THEN LTRIM(RIGHT(@str, LEN(@str) - CHARINDEX ('%', @str)))
ELSE LTRIM(RIGHT(@str, PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))))
END AS Unit
vous donne à la fois la partie numérique et la partie unitaire.
Voici quelques tests que j'ai faits avec les données que vous avez postées :
Entrée :
DECLARE @str VARCHAR(MAX) = '50 000ug/ML'
Sortie :
Numeric Unit
------------
50 000 ug/ML
Entrée :
DECLARE @str VARCHAR(MAX) = '99.5%'
Sortie :
Numeric Unit
------------
99.5
Entrée :
DECLARE @str VARCHAR(MAX) = '4000 . 35 % ug/ML'
Sortie :
Numeric Unit
------------------
4000 . 35 ug/ML