首先,这个计算的结果不会是精确的。您想“检索过去 24 小时的数据”,但您没有存储时间,只是存储日期。所以你只能从今天或今天和昨天检索数据:
- 仅提取今天的记录时:当您在 H00:00:01 提取数据时,可能会出现边界条件。由于您没有存储时间值,因此您将丢失昨天的数据,这很可能意味着所有数据。
- 在拉取今天和昨天的记录时:当您在 H23:59:59 拉取数据时,可能会出现边界条件。由于您不存储时间值,因此您将从 2 天(- 1 秒)中提取数据。
总之,将时间值添加到您的表中。最好是一列DATETIME
或TIMESTAMP
数据类型(差异仅在范围内)。
回到你的问题。基本上,你想要做的是:
/*
select * from table
where date >= now - 1 day;
*/
如何计算now - 1 day
?带DATE_SUB()
功能:
DATE_SUB(NOW(), INTERVAL 1 DAY)
如何使您的列中的日期?具有CONCAT_WS
和STR_TO_DATE()
功能:
STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s')
连接的字符串中有零 - 只要将这些列添加到表中,您就可以将它们替换为u.Hour
, 。但正如我之前所说,您将使用列实现最佳性能。u.Min
u.Sec
DATETIME
总结:
SELECT *
FROM users u
WHERE STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s') >= DATE_SUB(NOW(), INTERVAL 1 DAY)