检索不到一天的行

Posted

技术标签:

【中文标题】检索不到一天的行【英文标题】:Retrieve rows less than a day old 【发布时间】:2011-12-30 13:44:44 【问题描述】:

我有一列date,其默认值为CURRENT_TIMESTAMP,例如:2011-11-16 15:34:02。有没有办法在 mysql 语句(而不是 php)中设置条件来?比如:

SELECT * FROM orders where date > 24 hours ago

【问题讨论】:

【参考方案1】:

您可以使用timestampadd()获取24小时前的时间戳

SELECT * FROM orders WHERE `date` > timestampadd(hour, -24, now());

这相当于

SELECT * FROM orders WHERE `date` > timestampadd(day, -1, now());

【讨论】:

【参考方案2】:
SELECT *
FROM orders
WHERE DATE(`date`) = DATE(NOW() - INTERVAL 1 DAY)

注意date 周围的反引号,因为它是保留字。

【讨论】:

没有必要。试试select now() + interval 1 day。你会得到一个“明天”的答案。 我想你想要> 而不是= @macek:在我写答案的时候,OP 的问题是“这是一天前的事”。 有趣 - 每天都学习新东西 - 在 DATE_ADD 文档 dev.mysql.com/doc/refman/5.5/en/… 中间发现了该语法【参考方案3】:

是的,将 *date_sub* 与 interval 1 天curdate() 结合起来,也许还有别的 在此处查看文档http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-sub

【讨论】:

【参考方案4】:

此语句返回今天的所有行:

select * from orders where date_field >= CURDATE();

CURDATE() 返回今天的日期,因此搜索从午夜开始的记录。

【讨论】:

【参考方案5】:

您也可以直接使用与timestampdiff 功能的差异,女巫类似于timestampadd

SELECT * FROM orders WHERE TIMESTAMPDIFF(HOUR, date, NOW()) > 24;

我认为这不如使用 timestampadd 优化(因为它计算每一行的差异),但在我看来,如果您不关心优化,它更具可读性和替代方案。

【讨论】:

以上是关于检索不到一天的行的主要内容,如果未能解决你的问题,请参考以下文章

检索结束日期为某一天的所有订阅 Stripe

如何检索当月每一天的天气状况和位修改器?

一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array

一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array

使用 Power Query 过滤每月第一天和最后一天的日期

泪目了,记录一下改了一天的bug