-->

SQL Server的:两个日期之间取记录?(SQL Server : fetching recor

2019-07-02 17:57发布

在SQL我写一个SELECT语句中使用两个日期之间来获取数据, between and

例如:

select * 
from xxx 
where dates between '2012-10-26' and '2012-10-27'

但返回的行是第26只,而不是26和第27。

你能帮助我吗? 谢谢。

Answer 1:

正如其他人回答说,你可能有一个DATETIME (或其他变化)列,而不是一个DATE数据类型。

下面是针对所有作品,包括状态DATE

SELECT * 
FROM xxx 
WHERE dates >= '20121026' 
  AND dates <  '20121028'    --- one day after 
                             --- it is converted to '2012-10-28 00:00:00.000'
 ;

@Aaron贝特朗曾在博客中提到这一点: 什么做BETWEEN和魔鬼有什么共同点?



Answer 2:

你需要更加明确,并添加开始和结束时间,以及,下至毫秒:

select * 
from xxx 
where dates between '2012-10-26 00:00:00.000' and '2012-10-27 23:59:59.997'

该数据库可以很好地解释'2012-10-27''2012-10-27 00:00:00.000'



Answer 3:

你的问题问didnt之间如何正确使用,而要求与意外地截断结果帮助...

如前所述/在其他的答案暗示,问题是,你有时间段,除了日期。

根据我的经验,利用日期差异是值得的键盘上的额外的磨损/撕裂。 它可以让你表达你想要什么,你都包括在内。

select * 
from xxx 
where datediff(d, '2012-10-26', dates) >=0
and  datediff(d, dates,'2012-10-27') >=0

使用DATEDIFF,如果第一次约会是在第二次约会之前,你会得到一个正数。 有几种方法来写上面,例如总是第一个具有字段,然后不断。 只需翻转操作。 其个人喜好的问题。

你可以明确您是否想通过丢弃一个或两个等号包括或不包括端点。

BETWEEN会在你的情况下工作,因为端点都被假定为午夜(即日期)。 如果您的终端也DATETIME,之间使用可能需要更铸造。 在我的脑海里DATEDIFF放入我们的生活,从这些问题隔离我们。



Answer 4:

写这个的明确的方式是(即,由1增加第二日期并使其<

select * 
from xxx 
where dates >= '20121026'
  and dates <  '20121028'

如果您使用SQL Server 2008或以上,你可以安全CAST为DATE,同时保留SARGability ,如

select * 
from xxx 
where CAST(dates as DATE) between '20121026' and '20121027'

这明确地告诉SQL服务器,你只在日期部分感兴趣的dates列对之间比较范围。



Answer 5:

试试这个:

select * 
from xxx 
where dates >= '2012-10-26 00:00:00.000' and dates <= '2012-10-27 23:59:59.997'


Answer 6:

尝试使用下面的查询

select * 
from xxx 
where convert(date,dates) >= '2012-10-26' and convert(date,dates) <= '2012-10-27'


文章来源: SQL Server : fetching records between two dates?