2016-10-11 66 views
0

我使用下面的查询将varchar(255)的列'Characteristics__c'转换为DECIMAL(22,8)。特性___的值被指定为0.0,但它仍然会导致错误'算术溢出错误将varchar转换为数据类型数字'。不知道原因并感谢您的帮助。什么导致错误'算术溢出错误将varchar转换为数据类型数字'?

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)where 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

它看起来像varchar中的数字比十进制(22)更长。我的意思是一个数字太高,不能以十进制存储。检查您的数据

相关问题