这个问题为我们提供了如何在不使用时间因子的情况下在两个日期之间查询的答案,它就像这个
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'
如果我们有以下日期
- 2012年5月2日
- 2012年5月4日
我们使用这个
WHERE order_date >= '2012-05-01'
AND order_date < '2012-05-04'
它只输出2012-05-02
,不会输出2012-05-04
问题:如何在结果中包含2012-05-04
?我不希望我的用户选择2012-05-05
只是为了输出2012-05-04
。
WHERE order_date >= '2012-05-01'
AND order_date < '2012-05-05'
一天的持续时间为24小时,但可以用极小的单位来衡量,因此23:59:59不是持续时间的最后一点。MySQL现在支持几分之一秒,所以请不要依赖23:59:59查看http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
唯一始终准确的方法是使用少于第二天的时间。
如果您不想让用户看到第二天的值,只需选择结束日期,但在代码中添加1天。例如
WHERE order_date >= '2012-05-01'
AND order_date < date_add('2012-05-04',INTERVAL 1 DAY)
将<
更改为<=
,因为<
意味着它不包括与日期匹配的日期
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-01'
AND order_date <= '2012-05-04'
您也可以使用BETWEEN
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date BETWEEN '2015-05-01' AND '2012-05-04'
这假设order_date
的数据类型是DATE
,而不是DATETIME
。如果是DATETIME
,则需要确保时间部分是00:00:00
,因为这是将DATE
转换为DATETIME
时使用的默认时间。或者,您可以在查询的结束时间中包含一个明确的23:59:59.999999
,就像Cary Bondoc的回答一样。
为查询添加固定时间
order_date >= '2012-05-03 00:00:00' AND order_date <= '2012-05-04 23:59:59'
2012-05-0300:00:00表示我们希望在2012-05-03
开始时开始搜索
2012-05-0423:59:59意味着我们希望在2012-05-04
的当天结束时结束搜索
所以你的查询会像这个
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03 00:00:00'
AND order_date <= '2012-05-04 23:59:59'