这两个查询返回不同的订单数量,并不清楚原因。第一个where
子句是已接受的correct
版本:
where
year(OrderDate) = 2011
and MONTH(OrderDate) = 8
and DAY(OrderDate) = 3
但如果我说的话非常相似:
WHERE
io.OrderDate >= '2011-08-03 00:00:00'
and io.OrderDate <= '2011-08-03 11:59:59'
我得到了完全不同的记录数。在日期格式化中我有什么问题吗?或者我在逻辑中缺少什么?我更愿意说后者,因为它更容易使用恕我直言。
答案 0 :(得分:5)
编辑:
我建议的新答案将我原来的答案(如下所示)与Mikael和Alex的评论结合起来。
WHERE
io.OrderDate >= '2011-08-03 00:00:00'
and io.OrderDate < '2011-08-04 00:00:00'
应该提供所需的结果。
第二个查询只是从午夜到中午。 (00:00:00 - 11:59:59是十二小时)
WHERE
io.OrderDate >= '2011-08-03 00:00:00'
and io.OrderDate <= '2011-08-03 23:59:59'
应该修理它。
@Alex答案也有一点意义。毫秒计数(取决于您的特定表是否包含它们)。
WHERE
io.OrderDate >= '2011-08-03 00:00:00.000'
and io.OrderDate <= '2011-08-03 23:59:59.999'
会包含任何其他错过的记录
答案 1 :(得分:3)
嗯,11:59:59就在中午之前(那是 am 你引用的),这意味着你错过了12个小时。
另外,请记住,您还可以在DateTime中指定毫秒数。所以你可以'2011-08-03 23:59:59.100'
,这是在指定的最大OrderDate之后(即使在纠正了24小时后)
答案 2 :(得分:3)
你应该这样做。
WHERE
io.OrderDate >= '2011-08-03 00:00:00'
and io.OrderDate < '2011-08-04 00:00:00'
除了您的查询中的rowcount不同之外,第一个将无法在OrderDate列上使用任何索引。