Невозможно преобразовать varchar, который является действительным из числа в десятичное - PullRequest
0 голосов
/ 23 мая 2019

Я не могу преобразовать varchar в десятичное число, используя CAST или CONVERT. Когда я проверяю, является ли строка действительным числом или нет, ISNUMERIC возвращается как действительное число. Но когда используется CAST или CONVERT, он выдает «Ошибка преобразования типа данных varchar в числовой».

Пробовал разные варианты, но не повезло с ними. Если я уберу 'e +' из строки, это сработало, но результат был неправильным.

Я пытался использовать REPLACE, чтобы увидеть, есть ли что-нибудь. Но бесполезно.

select isnumeric( '1.67022e+006') as c,
CAST('1.67022e+006') AS DECIMAL(24, 10)) AS ci,
CAST(replace('1.67022e+006','','') AS DECIMAL(24, 10)) AS cii,
CAST(replace('1.67022e+006','e+','') AS DECIMAL(24, 10)) AS civ,
CAST(1.67022e+006 AS DECIMAL(24, 10)) AS ciii;

CAST('1.67022e+006') AS DECIMAL(24, 10)) --> Error    
CAST(replace('1.67022e+006','','') AS DECIMAL(24, 10)) --> error    
CAST(replace('1.67022e+006','e+','') AS DECIMAL(24, 10)) --> 1.6702200600    
CAST(1.67022e+006 AS DECIMAL(24, 10)) --> 1670220.0000000000

1 Ответ

0 голосов
/ 23 мая 2019

Я не думаю, что вы можете CAST экспоненциальные числа до decimal напрямую

CAST() до FLOAT, а затем до DECIMAL

select  CAST(CAST('1.67022e+006' AS FLOAT) AS DECIMAL(24, 10))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...