2016-07-20 8 views
-5

Ich versuche, Datums- und Zeitfelder, um den aktuellen Status zu einem bestimmten Zeitpunkt mit dem folgenden Code zu wählen ...SQL-Fehler in Casting

select max(CONVERT(DATETIME, S.Start_date, 108) 
    + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':'),'23:59') as LATST 
     , computer_number 
     , event_key 
     , exam_key 
    from CRIS_status S 
     where cast(Start_date as datetime) <= '17 Jul 2016 23:59:59' 
    group by computer_number, event_key, exam_key 

und ich bekomme die folgenden Fehler messgae beitreten Msg 242, Ebene 16, Status 3, Zeile 1 ...

+1

Bearbeiten Sie Ihre Frage und Beispieldaten und die gewünschten Ergebnisse liefern. –

+0

Gibt es einen Grund, warum Start_date und start_time nicht nur ein Datetime-Feld sind? – Kinetic

+0

Ich habe die gleiche Art von Casting hier in meiner Umgebung und das Ergebnis war perfekt, kein Fehler hier (Befehl (e) erfolgreich abgeschlossen). –

Antwort

0

Du bist gerade Datetime mit einem Varchar die wahrscheinlich Fehler

Versuchen mit diesem gibt ...

select max(CONVERT(DATETIME, S.Start_date, 108) 
    + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':'),'23:59') as LATST 
     , computer_number 
     , event_key 
     , exam_key 
    from CRIS_status S 
     where cast(Start_date as datetime) <= cast('17 Jul 2016 23:59:59' as datetime) 
    group by computer_number, event_key, exam_key 
0

Verwenden Sie stets eindeutige Datumsformat

select max(CONVERT(DATETIME, S.Start_date, 108) 
    + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':') 
,'23:59') as LATST 
     , computer_number 
     , event_key 
     , exam_key 
    from CRIS_status S 
     where cast(Start_date as datetime) < '20160718' 
    group by computer_number, event_key, exam_key 
+0

10 Ooh, danke Madhivanan, ich werde es versuchen und dich wissen lassen. – user6613529