2016-04-01 5 views
1

Ich versuche Daten in MS SQL Server mit einem Operator zu vergleichen, aber ich bin immer die Fehlermeldung:versuchen mal in SQL Server über Operator vergleichen

The data types time and datetime are incompatible in the greater than operator.

Select * 
from Student 
where Student# not in(
    Select distinct Student# 
    from Enrolls 
    inner join Section on Enrolls.Section# = Section.se# 
    where section_time > DATEADD(year, -2, GETDATE()) 
     And Count(distinct student#) > 6); 

Ich habe versucht, Casting zu Variablen, aber dann sind diese Variablen nicht definiert oder falsch definiert. Was ist der richtige Weg, dies zu tun?

+0

Gibt es eine 'section_date' Spalte als auch? – Bridge

+0

Keine GROUP BY benötigt?!? – jarlh

+0

ja. Jetzt bekomme ich den folgenden Fehler ... 'Die ORDER BY-Klausel ist ungültig in Sichten, Inline-Funktionen, abgeleiteten Tabellen, Unterabfragen und allgemeinen Tabellenausdrücken, außer TOP, OFFSET oder FOR XML wird ebenfalls angegeben.' –

Antwort

2

Anscheinend section_time hat Datentyp Zeit. Der Ausdruck DATEADD(year, -2, GETDATE()) hat den Datentyp datetime.

Ihr Code macht keinen Sinn, da Sie eine Zeit (die nur eine "Uhrzeit des Tages" enthält) mit einem Datum (und einer Uhrzeit) vor zwei Jahren vergleichen. Was ist

11:30 > 2014-04-01 09:24 

soll zurückgeben?

+0

Ehrfürchtig. Ich wusste nicht, dass ich Datentypen mische. Anfängerfehler von mir. Vielen Dank, dass Sie darauf hingewiesen haben. –

1

Mit 'CAST' Als Time Datentyp

Select * from Student where Student# not in(
Select distinct Student# from Enrolls inner join Section on 
Enrolls.Section#=Section.se# 
where section_time > CAST(DATEADD(year, -2, GETDATE()) AS TIME) 
And 
Count(distinct student#) > 6);