2016-10-11 3 views
0

Я использую следующий запрос, чтобы преобразовать столбец «Characteristic__c» varchar (255) в DECIMAL (22,8). Значение Characteristic__c было указано как просто 0.0, но оно все равно вызывает ошибку «Ошибка арифметического переполнения, преобразующая varchar в тип данных числовой». Не знаю причины и благодарности за помощь.Зачем возникает ошибка «Ошибка арифметического переполнения, преобразующая varchar в тип данных numeric»?

SELECT CONVERT(DECIMAL(22,8) , Characteristic__c) FROM [ODS].[dbo]. 
[Scorecard_Details__c] 
WHERE Attribute__c='Employment Duration' and Characteristic__c=0.0 and 
WOE__c=0 
+0

'varchar (255)' должен быть слишком широким, чтобы вписаться в 'decimal (22, 8)'. Просто потому, что данный _value_ равен '0.0', не означает, что занимаемое им пространство отражает эту сумму. –

+0

Вопрос только в том, что предложение WHERE, я считаю. Вы получите ту же ошибку с чем-то вроде: 'select 1 from (values ​​('1')) t (a) где t.a = 0.0;'. Исправление, вероятно, зависит от того, как выглядят ваши данные. – ZLK

+0

TBH Ваши имена столбцов выглядят уродливыми –

ответ

0

Предположительно, Characteristic_c не может быть преобразован в числовое. В SQL Server 2012+, вы можете просто использовать TRY_CONVERT():

SELECT TRY_CONVERT(DECIMAL(22, 8) , Characteristic__c) 
FROM [ODS].[dbo].[Scorecard_Details__c] 
WHERE Attribute__c = 'Employment Duration' AND 
     TRY_CONVERT(DECIMAL(22, 8), Characteristic__c) = 0.0 AND 
     WOE__c = 0; 

Примечание: Если WOE__c столбец символов, вы должны использовать TRY_CONVERT() там.

0

Похоже, что число в варчаре длиннее десятичного (22). Я имею в виду слишком высокий номер для хранения в десятичной форме. Проверьте свои данные

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

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