在this answer中,建议使用以下语法全天匹配给定日期。
select * from Info
where DateColumn
between '2014-08-25 00:00:00'
and '2014-08-25 23:59:59'
除了我们错过了每一天的最后一秒,这实际上可能不是一个大问题,但主要可能是一个交易破坏者,我不明白为什么不使用下面的简单表达。 / p>
匹配是在半开的时间间隔内进行的,上限是独占的(即 fromAndInclusive< = date< toButNotInclusive ),并且假定没有指定任何时间的日期在午夜(即00:00:00.000)。
select * from Info
where DateColumn
between '2014-08-25' and '2014-08-26'
请注意,在SQL方面,我甚至没有声称拥有任何级别的能力,所以这个问题不应该指出任何错误。我很自大,但是当谈到DB时,我已经被贬低了一两次。 :)
答案 0 :(得分:3)
两者都会返回不正确的结果。
Between 包含 两个结束,因此您的第一个查询
select * from Info
where DateColumn
between '2014-08-25 00:00:00'
and '2014-08-25 23:59:59'
会忽略2014-08-25
最后一秒内的任何内容。
你提出的第二个问题太贪心了。它将包括26日午夜正好的任何内容,即2014-08-26 00:00:00
。
select * from Info
where DateColumn
between '2014-08-25' and '2014-08-26'
要获得所需的结果,您应该在评论中指出>=
和<
(如@Lamak):
select * from Info
where DateColumn >= '2014-08-25' and DateColumn < '2014-08-26'.
鉴于表中的以下数据:
2014-08-25 23:59:59
2014-08-25 23:59:59.500
2014-08-26 00:00:00
2014-08-26 00:00:00.500
2014-08-26 00:00:01
第一个查询只匹配:
2014-08-25 23:59:59.000
第二场比赛:
2014-08-25 23:59:59.000
2014-08-25 23:59:59.500
2014-08-26 00:00:00.000 --this is wrong!
最后第三次(正确)匹配:
2014-08-25 23:59:59.000
2014-08-25 23:59:59.500
答案 1 :(得分:-1)
select * from Info
where DateColumn >='2014-08-25 00:00:00'
and datecolumn<='2014-08-25 23:59:59'