For reasons I can not help I have a varchar column with data like the following: 820.0E-12, 10.0E+00.
I want the numeric value. So I have this test query which works:
declare @d varchar(256)
set @d = '820.0E-12'
select
CASE
WHEN @d like '%E-%' THEN LTRIM(RTRIM(CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))))
WHEN @d like '%E+%' THEN NULL
ELSE @d
END
My result is: 0.000000000820000000 (which is what I want)
I change my SQL to account for the numbers > 0 (10.0E+00) like this:
WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)
My result changes to: 8.2E-10 (which is NOT what I want)
If I change @d='10.0E+00' then I get 10 (which is correct).
I've got a view that I need to make the output from a varchar column, that contains scientific notation, casted/converted into decimal(18,18).
Can somebody tell me what craziness is going on here?
Or, maybe my question should be, how do I cast/convert a varchar scientific notation column to decimal output in a view?
My first WHEN statement works for numbers < 0 but I also need to account for numbers > 0. When I change the second WHEN, to include the CAST, it breaks/gives the wrong result.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…