इसे आजमाएं..
DECLARE @table table(XYZ VARCHAR(8) , id int)
INSERT INTO @table
SELECT '4000', 1
UNION ALL
SELECT '3.123', 2
UNION ALL
SELECT '7.0', 3
UNION ALL
SELECT '80000', 4
UNION ALL
SELECT NULL, 5
UNION ALL
SELECT 'WTF',6
SELECT CASE
WHEN ISNUMERIC(XYZ) = 0 THEN NULL
WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
WHEN ISNUMERIC(XYZ) >0 then convert(decimal(18,3),xyz) / 1000.000
ELSE NULL
END
FROM @table
आउटपुट
4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL
संपादित करें - आउटपुट में 3 दशमलव स्थान रखने के लिए ऐसा करें
SELECT convert(decimal(8,3),CASE
WHEN ISNUMERIC(XYZ) = 0 THEN NULL
WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
WHEN ISNUMERIC(XYZ) >0 then convert(decimal(18,3),xyz) / 1000.000
ELSE NULL
END)
FROM @table
ध्यान दें (8,3) इसे परिभाषित करता है, कुल परिशुद्धता 8 अंक, बिंदु के बाद 3।
आप वापस वर्चर (8) में भी कनवर्ट करना चाह सकते हैं