2016-10-11 64 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)更長。我的意思是一個數字太高,不能以十進制存儲。檢查您的數據

相關問題