2017-01-31 4 views
0

Ich habe diese Anfrage:Fehler bei der Konvertierung, wenn der varchar Wert ‚C000000055‘ in den Datentyp int Umwandlung

SELECT 
cast(co_num as varchar), 
activity_date, 
due_date 
FROM coitem_log_mst 
WHERE cast(co_num as varchar) = 3199 and co_line = 10 and co_release = 0 
ORDER BY activity_date 

und ich erhalte diese Störung:

Conversion failed when converting the varchar value 'C000000055' to data type int. 

ich verschiedene Umwandlungen versucht haben, und setzen der co_num Wert in ''. Aber immer noch den Fehler bekommen. Bitte beraten Sie ...

+5

Als erstes sollte 'varchar' niemals ohne explizite Angabe einer Länge verwendet werden. Wenn Sie zu 'varchar' konvertieren, warum vergleichen Sie es dann mit einem Wert, der ein' int' ist? Verwende 'cast (co_num as varchar (20) = '3199'' – Lamak

+3

Du wirfst nach varchar und vergleichst dann mit einer ganzen Zahl. Warum? Vergleiche mit einem varchar und es geht dir gut. – Luaan

Antwort

1

Ohne einfache Anführungszeichen die 3199 Sie vergleichen es mit einem INT. Es versucht, den Wert in einen INT zu konvertieren, um den Vergleich durchzuführen, und einer Ihrer Werte (C000000055) kann nicht in INT konvertiert werden.

Apostrophe (') In der Nähe von 3199 es als VARCHAR vergleichen:

Select Cast(co_num As Varchar) 
     , activity_date 
     , due_date 
From coitem_log_mst 
Where Cast(co_num As Varchar) = '3199' 
     And co_line = 10 
     And co_release = 0 
Order By activity_date; 
0

Soweit Sie co_num als varchar vergleichen, müssen Sie mit der rechten Hand-Wert Apostroph.

SELECT 
cast(co_num as varchar), 
activity_date, 
due_date 
FROM coitem_log_mst 
WHERE cast(co_num as varchar) = '3199' and co_line = 10 and co_release = 0 
ORDER BY activity_date 
1

In SQL Server 2012+ würden Sie einfach try_convert() verwenden. Jedoch Ihre Spalte erscheint bereits eine Zeichenfolge zu sein, so wie etwa:

SELECT co_num , activity_date, due_date 
FROM coitem_log_mst 
WHERE co_num = '3199' and co_line = 10 and co_release = 0 
ORDER BY activity_date; 

Hinweis: Wenn co_line ein String oder co_release ein String ist, dann sollten Sie diese Werte in einfache Anführungszeichen ein:

WHERE co_num = '3199' and co_line = '10' and co_release = '0' 
Verwandte Themen