【问题标题】:MySQL select between two dates not working as expectedMySQL 在两个日期之间选择未按预期工作
【发布时间】:2011-09-10 19:16:53
【问题描述】:

我正在尝试创建一个查询,它将选择两个日期之间的所有日期
这是我的查询:

$query = "SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '$date1' AND '$date2' AND D1.D1_ID = D2.D2_ID";

问题是,它没有返回任何东西,但也没有产生错误

所以我尝试像这样直接将它输入到phpMyAdmin中

SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
        AND D1.D1_ID = D2.D2_ID`

然后这样

SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'

像这样

SELECT * FROM D1
    WHERE DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'

我就明白了

MySQL 返回一个空结果集(即零行)。 (查询耗时 0.0003 秒)

是的,我的表存在,列也存在 :)

【问题讨论】:

  • 你有一个DATE_ADDED 的数据在 2011 年 1 月 1 日到 2011 年 12 月 12 日之间,可能不是 2010 年的数据?
  • 您的代码运行良好,您能否在表格中提供日期?
  • 您能告诉我们这两个表的架构和一些示例行吗?
  • 现在工作!什么都没改变!非常困惑!

标签: php mysql join date between


【解决方案1】:

如果你总是想选择一整年,这样选择会更容易:

SELECT * FROM D1 WHERE YEAR(DATE_ADDED) = 2011;

【讨论】:

  • 更简单,是的。更快,没有。更快的是(DATE_ADDED BETWEEN '2011-01-01' AND 2011-12-31)
  • 有关性能影响的更多信息,请参阅对此答案的评论:stackoverflow.com/questions/6273361/…
【解决方案2】:

在第一种情况下,缺少结果可能是由于内部连接。为了使结果在集合中,它需要两个表中的记录,即。除非 d2 在 d2_id 列中也有该 id,否则不会出现来自 d1 的记录。要解决此问题,如果您的业务逻辑正确,请使用left join

但是,您的最后一个案例(没有连接)表明原因是第一个(左)表 d1 中缺少匹配的记录。

如果没有完整的数据集,我们无法进一步评论,因为您运行的所有代码都是完全有效的。

【讨论】:

  • x BETWEEN a AND b 等价于(a <= x) AND (x <= b)
  • @ypercube。很正确。有瞬间失常。已在答案中修复。
【解决方案3】:

请实现以下代码

SELECT DISTINCT * FROM D1,D2
    WHERE D1.DATE_ADDED BETWEEN DATE_FORMAT('2011-01-01','%Y-%m-%d')
        AND DATE_FORMAT('2011-12-12','%Y-%m-%d')
        AND D1.D1_ID = D2.D2_ID`

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2017-03-07
    相关资源
    最近更新 更多