यदि संख्यात्मक भाग हमेशा शुरुआत में होता है, तो आप इसका उपयोग कर सकते हैं:
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