MySQL在2个日期之间检索结果,没有时间因素,不输出确切日期的结果

时间:2016-04-14 00:34:21

标签: mysql date datetime

This question为我们提供了如何在不使用时间因素的情况下查询两个日期的答案,就像这样

SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'

如果我们有以下日期

  1. 2012-05-02
  2. 2012-05-04
  3. 我们用这个

    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

3 个答案:

答案 0 :(得分:1)

Mode2ViewController.deinit()

一天的持续时间为24小时,但这可以用非常小的单位来衡量,所以23:59:59不是持续时间的最后一点。 MySQL现在支持几分之一秒,所以请不要依赖于23:59:59看http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html

唯一的始终准确方法是使用少于下一天。

如果您不希望您的用户看到第二天的值,只需选择结束日期,但在代码中添加1天。 e.g。

WHERE order_date >= '2012-05-01'
AND order_date < '2012-05-05'

答案 1 :(得分:0)

<更改为<=,因为<表示它不包含与该日期匹配的日期

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转换为{{{}时使用的默认时间1}}。或者,您可以在查询的结束时间中加入明确的DATETIME,例如Cary Bondoc的答案。

答案 2 :(得分:-1)

为查询添加修复时间

order_date >= '2012-05-03 00:00:00' AND order_date <= '2012-05-04 23:59:59'

2012-05-03 00:00:00 表示我们要在2012-05-03

的开头开始搜索

2012-05-04 23: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'