2016-10-11 10 views
0

Ich benutze die Abfrage unten, um eine Spalte 'Characteristic__c' von varchar (255) in DECIMAL (22,8) zu konvertieren. Der Wert von Characteristic__c wurde als 0.0 angegeben, verursacht aber immer noch den Fehler 'Arithmetischer Überlauffehler beim Konvertieren von varchar in den numerischen Datentyp.'. Ich kenne den Grund nicht und danke für die Hilfe.Was verursacht den Fehler 'arithmetischer Überlauffehler beim Konvertieren von varchar in Datentyp' numerisch '?

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)' muss zu breit sein, um in 'Dezimal (22, 8)' zu passen. Nur weil ein gegebener _value_ "0.0" ist, bedeutet das nicht, dass der Platz, den er einnimmt, diesen Betrag widerspiegelt. –

+0

Das Problem ist nur mit der WHERE-Klausel, glaube ich. Sie erhalten den gleichen Fehler mit etwas wie: 'Wählen Sie 1 aus (Werte ('1')) t (a) wobei t.a = 0.0;'. Das Update hängt wahrscheinlich davon ab, wie Ihre Daten aussehen. – ZLK

+0

TBH Ihre Spaltennamen sehen hässlich aus –

Antwort

0

Vermutlich kann Characteristic_c nicht in eine Zahl konvertiert werden. In SQL Server 2012+, können Sie einfach TRY_CONVERT() verwenden:

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; 

Hinweis: Wenn WOE__c eine Zeichenspalte ist, sollten Sie TRY_CONVERT() es zu verwenden.

0

Es sieht so aus, als wäre die Zahl im Varchar länger als dezimal (22). Ich meine eine Zahl zu hoch, um im Dezimalsystem gespeichert zu werden. Überprüfen Sie Ihre Daten

Verwandte Themen