2016-03-25 6 views
0

У меня есть промежуточная таблица, загружаемая данными из набора данных SAS, содержащего 5M записей. Все столбцы: varchar. Я пытаюсь преобразовать несколько столбцов в decimal(32,10). Но это порождает ошибку. Я попробовал бросить, я попробовал конвертировать и даже разбивать данные до и после десятичного числа - тот же результат.Ошибка преобразования Varchar в десятичный SQL Server

Я посмотрел на флаг колонны IsNumeric и есть 0 записей <> 1, что означает, что данные являются числовыми.

case 
    when wtd_count = '.' THEN NULL 
    when wtd_count = '' THEN NULL 
    else convert(decimal(32, 10), wtd_count) 
end 

Ошибка:

Msg 8114, Level 16, State 5, Line 99
Error converting data type varchar to numeric.

Так мне интересно, что еще я могу сделать, чтобы преобразовать данные в десятичную? Есть идеи? Любая помощь будет очень признательна.

+0

Должно быть, оно должно быть десятичным? Как насчет Вала или Лонга? Я предполагаю, что вы хотите, чтобы значение было числом? – Leptonator

+0

Вы, очевидно, имеете хотя бы одно значение в этой таблице, которое не может быть преобразовано в десятичную. Взгляните на TRY_PARSE (https://msdn.microsoft.com/en-us/library/hh213126.aspx), если вы находитесь в 2012 году или новее. –

+0

Спасибо за ваши ответы @Sean Lange. Невозможно использовать Try_Parse, так как я на сервере Sql 11.0.x. – Bee

ответ

0

Если вы в SQL Server 2012 и выше попытаться использовать try_parse или try_convert

0

ISNUMERIC не является надежным для того, что вы делаете. Он будет знаменует значения в таких действительных, как денежные символы и запятые.

Похоже, что есть некоторые нечисловые данные. TRY_CONVERT или TRY_PARSE - ваш друг здесь. В качестве FYI SQL Server версии 11.0.x является SQL Server 2012, поэтому вы сможете использовать их.

Мне также трудно поверить, что преобразование в числовые произведения, но не десятичные. Я не могу найти никакой информации, которая говорит о том, что фактическая реализация этих двух типов данных различна, и как таковая не должна работать.

Я бы сделал более подробный анализ ваших данных, чтобы убедиться, что он выглядит так, как вы ожидаете.

0

После прочтения вашего заявления о ситуации я полагаю, что у вас есть значения, разделенные комой. Я уверен, что вы должны использовать: CONVERT(DECIMAL(32,10),REPLACE(wtd_count,',','.'))

Смежные вопросы