【问题标题】:How does date_add and interval works in MySQL?date_add 和 interval 在 MySQL 中是如何工作的?
【发布时间】:2011-09-23 11:30:15
【问题描述】:

我尝试从数据时间在 1 分钟后的表中选择那些行。我尝试通过以下方式进行:

SELECT datetime FROM my_table 
WHERE datetime > date_add( curdate( ) , INTERVAL -1 MINUTE )

这是我得到的:

2011-09-23 02:39:53
2011-09-23 08:10:07

这显然有问题。有人知道为什么吗?

添加

看起来真的很奇怪。如果我使用interval -1 hour,我会得到 4 或 7 小时前的结果(我不应该得到它们),但我会过滤超过 14 小时的结果。怎么可能?

【问题讨论】:

  • 使用now() 而不是curdate()

标签: mysql select where intervals


【解决方案1】:

从过去的一分钟到未来的一分钟:

SELECT * FROM my_table
WHERE datetime BETWEEN
    DATE_ADD(NOW(), INTERVAL -1 MINUTE) AND
    DATE_ADD(NOW(), INTERVAL 1 MINUTE)

从现在到未来一分钟:

SELECT * FROM my_table
WHERE datetime BETWEEN
    NOW() AND
    DATE_ADD(NOW(), INTERVAL 1 MINUTE)

从过去一分钟到现在:

SELECT * FROM my_table
WHERE datetime BETWEEN
    DATE_ADD(NOW(), INTERVAL -1 MINUTE) AND
    NOW()

【讨论】:

  • 在我看来,第一个查询应该返回 1 分钟内到过去和从现在开始到未来的结果。第二个查询应该返回从现在到未来 1 分钟内的结果。
  • @Roman:编辑了我的帖子以涵盖所有情况...我怀疑我没有理解您的问题...
  • 我不需要未来的结果。我需要从现在到过去一分钟内的那些。所以,可能应该是select * from my_table where datetime between date_add(now(), interval -1 minute) and now()
  • 我可能需要使用date_sub 吗?但不管怎样,我试过了,还是不行。
  • @Roman:我现在尝试了第三个查询,效果很好。我不知道你的数据库中发生了什么...
猜你喜欢
  • 2021-05-21
  • 1970-01-01
  • 2019-09-15
  • 2018-01-16
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多