检索不到一天的行
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
优化(因为它计算每一行的差异),但在我看来,如果您不关心优化,它更具可读性和替代方案。
【讨论】:
以上是关于检索不到一天的行的主要内容,如果未能解决你的问题,请参考以下文章
一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array
一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array