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

时间:2010-04-22 08:33:18

标签: sql-server datetime types sql

我正在尝试从表中获取一些记录,但是当我使用OR而不是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)

4 个答案:

答案 0 :(得分:2)

我认为你的“来自”和“以”错误的方式......

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

答案 1 :(得分:2)

很难说没有表中的任何示例数据。

我会检查有多少记录的datefrom大于 dateto值 - 这对我来说很奇怪 - 这可能是查询{{{ 1}}不会返回任何内容。

尝试使用AND 替换 dateto值 - 请注意CONVERT(datetime, '4-23-2010',111)是4月22日午夜(一天开始),而不是结束一天。

答案 2 :(得分:1)

这是因为日期意味着时间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)

或者更好的是,使用BETWEEN运算符:

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

注意第二个日期是日期+ 1,即第二天,基本上是日期23:59:59

答案 3 :(得分:0)

当您使用AND时,您将获得两个日期之间的日期(在这种情况下,相同的日期)。

当您使用OR时,您将获得大于第一个的日期,然后是第二个日期。

它们是两种不同的条件,因此您的结果会有所不同。

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

相关问题