【问题标题】:Retrieve MySQL records where date is X day ago检索日期为 X 天前的 MySQL 记录
【发布时间】:2015-04-11 15:10:27
【问题描述】:

您好,我正在尝试从 MySQL 数据库中提取一些记录,我在这里尝试过可能的解决方案,例如:

SELECT o.id_order, o.reference, o.id_customer, DATE_FORMAT(o.invoice_date, '%m%d%y') AS 'invoice_date'
FROM ps_orders AS o
WHERE DATE(o.invoice_date) = CURDATE() - INTERVAL 100 DAY;

SELECT o.id_order, o.reference, o.id_customer, o.invoice_date
FROM ps_orders AS o
WHERE o.invoice_date = DATE_SUB(CURDATE(), INTERVAL 30 DAY);

但我一直得到 0 个结果。

格式:

o.invoice_date

是 2013-04-06 02:02:12 (YYYY-MM-DD HH:II:SS)。

我不知道为什么我一直得到 0 结果。当我尝试使用此查询时:

SELECT o.id_order, o.reference, o.id_customer, o.invoice_date
FROM ps_orders AS o
WHERE o.invoice_date < CURDATE() - INTERVAL 30 DAY
ORDER BY o.invoice_date DESC;

工作,但我只想从 x 天前(确切) 获取数据。有人可以指出我正确的方向。感谢您的帮助...

【问题讨论】:

  • DATE(o.invoice_date) = CURDATE() - INTERVAL 100 DAY 应该没问题,即使它不会利用索引...你确定你有 100 天前的发票吗?
  • @fthiella 是的,我尝试了不同的数字,例如 30、40、10、100,但仍然得到 0 结果。不知道为什么。
  • @fthiella,再想想你是对的。我没有 100 天前的发票(确切地说)。
  • 创建一个日期为 30 天前的虚拟发票,然后再次尝试查询,它应该可以工作。除此之外,戈登的解决方案也应该可以工作

标签: mysql date


【解决方案1】:

最好的办法是:

WHERE o.invoice_date >= CURDATE() - INTERVAL 30 DAY AND
      o.invoice_date < CURDATE() - INTERVAL 29 DAY

这允许查询引擎使用o.invoice_date 上的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多