在SQL我写一个SELECT
语句中使用两个日期之间来获取数据, between and
例如:
select *
from xxx
where dates between '2012-10-26' and '2012-10-27'
但返回的行是第26只,而不是26和第27。
你能帮助我吗? 谢谢。
在SQL我写一个SELECT
语句中使用两个日期之间来获取数据, between and
例如:
select *
from xxx
where dates between '2012-10-26' and '2012-10-27'
但返回的行是第26只,而不是26和第27。
你能帮助我吗? 谢谢。
正如其他人回答说,你可能有一个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
和魔鬼有什么共同点?
你需要更加明确,并添加开始和结束时间,以及,下至毫秒:
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'
。
你的问题问didnt之间如何正确使用,而要求与意外地截断结果帮助...
如前所述/在其他的答案暗示,问题是,你有时间段,除了日期。
根据我的经验,利用日期差异是值得的键盘上的额外的磨损/撕裂。 它可以让你表达你想要什么,你都包括在内。
select *
from xxx
where datediff(d, '2012-10-26', dates) >=0
and datediff(d, dates,'2012-10-27') >=0
使用DATEDIFF,如果第一次约会是在第二次约会之前,你会得到一个正数。 有几种方法来写上面,例如总是第一个具有字段,然后不断。 只需翻转操作。 其个人喜好的问题。
你可以明确您是否想通过丢弃一个或两个等号包括或不包括端点。
BETWEEN会在你的情况下工作,因为端点都被假定为午夜(即日期)。 如果您的终端也DATETIME,之间使用可能需要更铸造。 在我的脑海里DATEDIFF放入我们的生活,从这些问题隔离我们。
写这个的明确的方式是(即,由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
列对之间比较范围。
试试这个:
select *
from xxx
where dates >= '2012-10-26 00:00:00.000' and dates <= '2012-10-27 23:59:59.997'
尝试使用下面的查询
select *
from xxx
where convert(date,dates) >= '2012-10-26' and convert(date,dates) <= '2012-10-27'