Sql server 为什么sql中的日期比较不起作用。请帮忙

Sql server 为什么sql中的日期比较不起作用。请帮忙,sql-server,datetime,types,sql,Sql Server,Datetime,Types,Sql,我试图从表中获取一些记录,但当我使用或而不是时,它会返回一些记录,但在其他情况下不会。 表中给出了确切的日期。我犯了什么错误 select newsid,title,detail,hotnews from view_newsmaster where datefrom>=CONVERT(datetime, '4-22-2010',111) AND dateto<=CONVERT(datetime, '4-22-2010',111) 当您使用AND时,您将获得两个日期之间的日

我试图从表中获取一些记录,但当我使用或而不是时,它会返回一些记录,但在其他情况下不会。 表中给出了确切的日期。我犯了什么错误

select newsid,title,detail,hotnews 
from view_newsmaster
where  datefrom>=CONVERT(datetime, '4-22-2010',111) 
  AND dateto<=CONVERT(datetime, '4-22-2010',111)
当您使用AND时,您将获得两个日期之间的日期(在本例中为同一日期)

当您使用或时,您将获得比第一个日期大、比第二个日期低的日期

它们是两种不同的情况,所以你的结果会有所不同是理所当然的


你想达到什么目标?这个查询应该返回什么?

我认为您的from和to循环错误

select newsid,title,detail,hotnews from view_newsmaster 
 where  dateto>=CONVERT(datetime, '4-22-2010',111) AND datefrom<=CONVERT(datetime, '4-22-2010',111) 

如果没有表中的任何示例数据,很难说

我会检查有多少记录的datefrom值大于dateto值-这对我来说很奇怪-这可能是为什么查询带有且不返回任何内容的原因

尝试用CONVERTdatetime,'4-23-2010',111替换dateto值-记住CONVERTdatetime,'4-22-2010',111
是4月22日第22天的午夜开始,而不是一天的结束。

这是因为日期意味着时间00:00:00,不指定时间将排除当天的记录,但技术上是在范围内的

指定时间:

where  datefrom>=CONVERT(datetime, '4-22-2010 00:00:00',111) 
  AND dateto<=CONVERT(datetime, '4-22-2010 23:59:59',111)
注意第二个日期是date+1,即第二天,基本上是date 23:59:59

where  fDateField BETWEEN '4-22-2010' AND '4-23-2010'