这些日期where-clause之间的区别是什么?

Jos*_*son 2 sql t-sql sql-server

这两个查询返回不同的订单数量,并不清楚为什么.第一个where条款是可接受的correct版本:

where
year(OrderDate) = 2011
and MONTH(OrderDate) = 8
and DAY(OrderDate) = 3
Run Code Online (Sandbox Code Playgroud)

但如果我说一些非常相似的话:

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate <= '2011-08-03 11:59:59'
Run Code Online (Sandbox Code Playgroud)

我得到了完全不同的记录数.在日期格式化中我有什么问题吗?或者我在逻辑中缺少什么?我更愿意说后者,因为它更容易使用恕我直言.

Sam*_*aan 5

编辑:

我推荐的新答案将我原来的(如下所示)与Mikael和Alex的评论结合起来.

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate < '2011-08-04 00:00:00'
Run Code Online (Sandbox Code Playgroud)

应该提供所需的结果.


第二个查询仅从午夜到中午.(00:00:00 - 11:59:59是12小时)

WHERE 
io.OrderDate >= '2011-08-03 00:00:00' 
and io.OrderDate <= '2011-08-03 23:59:59'
Run Code Online (Sandbox Code Playgroud)

应该解决它.

@Alex答案也有一点意义.毫秒计数(取决于您的特定表是否包含它们).

WHERE 
io.OrderDate >= '2011-08-03 00:00:00.000' 
and io.OrderDate <= '2011-08-03 23:59:59.999'
Run Code Online (Sandbox Code Playgroud)

将包括错过的任何其他记录