2016-05-13 88 views
1

Abfrage Umwandlung:Fehler bei der Konvertierung, wenn varchar Wert in den Datentyp int Fehler in Visual Studio

SELECT CAST(College_Year AS VARCHAR(10)), 
     Learner_Id, 
     Forename_1, 
     Surname, 
     sum(Possible_Duration) AS Possible_Duration, 
     sum(Present_Duration) AS Present_Duration, 
     CASE 
      WHEN sum(Present_Duration) = 0 THEN 0 
      ELSE sum(Present_Duration)/sum(Possible_Duration) 
     END AS Attendance 
FROM dbo.IM_AT_Attendance_vw 
WHERE Session_date >= 
    (SELECT ACYR_Start_Date 
    FROM dbo.ACYR 
    WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year) 
    AND Session_Date <= 
    (SELECT ACYR_End_Date 
    FROM dbo.ACYR 
    WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year) 
    AND Session_Date NOT IN 
    (SELECT Holiday_Date 
    FROM IM_EFC_Holidays) 
    AND Possible = 1 
    AND month(Session_Date) = month(DATEADD(mm, -1, GETDATE())) 
    AND Learner_ID = @Learner_ID 
GROUP BY College_Year, 
     Learner_Id, 
     Forename_1, 
     Surname 
ORDER BY Surname, 
     Attendance 

obige Abfrage funktioniert in SSMS gut, aber wenn ich von Visual Studio ausführen wirft einen Fehler:

Conversion failed when converting varchar value '414084H' to datatype int.

I bin raten Problem mit LearnerID Spalte - Datentyp varchar (12)

Ich versuchte CAST (Learner_ID AS INT) und CONVERT (INT, Learner_ID) aber hilft nicht ....

Jede Hilfe wird sehr geschätzt.

Danke,

Ar

+1

Bitte mehr Kontext zu Ihrer Frage – blackbishop

+0

@blackbishop hinzufügen - Bitte siehe oben –

Antwort

1

Ihr LearnerID Wert "414084H" enthält am Ende einen Brief. Daher kann es nicht in Ganzzahl konvertiert werden.

Wenn das Format ist alyways gleichen Sie nur die ersten 6 Zeichen aus dem Wert in der Auswahl auswählen können, und auf diese Weise wird die Umwandlung erfolgreich:

select SUBSTRING(LearnerID, 0, 6) 
+0

Ich habe versucht, aber immer noch die Abfrage gibt den gleichen Fehler ... –

+1

Sie können versuchen, die Zeichenkette direkt in der gespeicherten Prozedur int zu werfen. Also: SELECT CAST (SUBSTRING (LernerID, 0, 7) AS INTEGER). Ich habe gerade gemerkt, dass Sie als Parameter 7, nicht 6 senden müssen, um alle Ziffern zu berücksichtigen. – Patricia

+0

Fehler: Die Konvertierung ist beim Konvertieren des Varchar-Werts '4B0446' in den Datentyp int fehlgeschlagen. –