Ако цифровата част винаги е в началото, тогава можете да използвате това:
PATINDEX('%[0-9][^0-9]%', ConcUnit)
за да получите индекса на последната цифра.
И така, това:
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
ви дава:
Number Unit
-------------
4000 ug/ML
РЕДАКТИРАНЕ:
Ако числовите данни включват и двойни стойности, тогава можете да използвате това:
SELECT LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))
за да получите индекса на последната цифра .
И така, това:
SELECT LEFT(@str, LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str)))
ви дава числовата част.
И това:
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
ви дава както числова, така и единична част.
Ето някои тестове, които направих с данните, които сте публикували:
Въвеждане:
DECLARE @str VARCHAR(MAX) = '50 000ug/ML'
Изход:
Numeric Unit
------------
50 000 ug/ML
Въвеждане:
DECLARE @str VARCHAR(MAX) = '99.5%'
Изход:
Numeric Unit
------------
99.5
Въвеждане:
DECLARE @str VARCHAR(MAX) = '4000 . 35 % ug/ML'
Изход:
Numeric Unit
------------------
4000 . 35 ug/ML