2016-04-01 16 views
1

operatör üzerinden SQL Server kez karşılaştırmaya çalışıyor ama hata alıyorum: Ben casting denedimBir operatör ile MS SQL Server tarihleri ​​karşılaştırmak çalışıyorum

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); 

değişkenlere, ancak daha sonra bu değişkenler tanımsız veya yanlış tanımlanmıştır. Bunu yapmanın doğru yolu nedir?

+0

bir 'section_date' kolon yanı sıra var mı? – Bridge

+0

GROUP BY gerekli mi?!? – jarlh

+0

evet. Şimdi aşağıdaki hatayı alıyorum ... 'ÜST, OFSET veya FOR XML belirtilmemişse, ORDER BY yan tümcesi görünümler, satır içi işlevler, türetilmiş tablolar, alt sorgular ve ortak tablo ifadelerinde geçersizdir.' –

cevap

2

Görünüşe göre, section_time, veri türü zaman'a sahiptir.

DATEADD(year, -2, GETDATE()) ifadesi, datetime veri tipine sahiptir.

Kodunuz, bir zaman (bir "günün saatini" içeren) karşılaştırdığınız için, bir tarih (ve zaman) iki yıl önce karşılaştırdığınız için anlam ifade etmiyor.

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

dönmesi bekleniyor?

+0

Müthiş. Veri tiplerini karıştırdığımı farketmedim. Çaylak benim hatam. Bunu işaret ettiğin için teşekkürler. –

1

Time veri türü gibi, 'cast' kullanarak

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); 
İlgili konular