Casting Scientific Notation (from varchar -> numeric) in a view

По причинам, с которыми я не могу помочь, у меня есть столбец varchar с данными следующего вида: 820.0E-12, 10.0E+00.

Мне нужно числовое значение. Поэтому у меня есть такой тестовый запрос, который работает:

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

Мой результат: 0.000000000820000000 (это то, что я хочу)

Я изменяю свой SQL для учета чисел > 0 (10.0E+00) следующим образом:

WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)

Мой результат меняется на: 8.2E-10 (что НЕ то, что я хочу)

Если я изменю @d='10.0E+00', то получу 10 (что правильно).

У меня есть представление, в котором мне нужно сделать вывод из столбца varchar, содержащего научную нотацию, приведенную/преобразованную в decimal(18,18).

Кто-нибудь может мне объяснить, что за безумие здесь происходит?

Или, может быть, мой вопрос должен звучать так: как мне привести/преобразовать столбец varchar с научной нотацией в десятичный вывод в представлении?

Мой первый оператор WHEN работает для чисел < 0, но мне также нужно учитывать числа > 0. Когда я изменяю второй WHEN, чтобы включить CAST, он ломается/дает неправильный результат.

15
задан Lance Perry 19 July 2011 в 15:43
поделиться