我想知道是否有人可以帮助我。我试图从表中选择过去一个小时内的记录。但是出于某种原因,它会不断返回所有记录。
finished
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 11:00:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 12:55:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:00:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
2019-05-17 13:25:00
这是我的查询:
SELECT *
FROM people
WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR)
我在下午12点运行查询,当时只希望在晚上11点至12点之间记录。而且,如果以后再运行-假设下午3点,我希望记录在2-3pm之间。 我做错了什么吗?请帮忙。
答案 0 :(得分:1)
如果表中可能会有将来的事件,则还必须指定上限。
SELECT *
FROM people
WHERE finished >= date_sub(now(), INTERVAL 1 HOUR)
AND finished < now();
答案 1 :(得分:0)
您正在做的是,您在12
说的是向我显示所有时间戳大于11
的数据
DATE_SUB(NOW(), INTERVAL 1 HOUR)
将导致
2019-05-17 11:00:00
在
2019-05-17 12:00:00
因此您的查询看起来像
SELECT *
FROM people
WHERE finished > 2019-05-17 11:00:00
因此您的时间戳为2019-05-17 12:55:00
的记录将满足上述条件并显示在结果中。
为了达到您想要的目标,您必须在查询中添加上限
SELECT *
FROM people
WHERE finished > DATE_SUB(NOW(), INTERVAL 1 HOUR) and finished <= NOW();
答案 2 :(得分:0)
使用BETWEEN
是另一种选择。确保运行SELECT NOW()
以确保您不需要修正时区或其他任何东西。
SELECT * FROM people
WHERE finished BETWEEN DATE_SUB(NOW(), INTERVAL 3600 SECOND) AND NOW();
答案 3 :(得分:-2)
SELECT *
FROM people
WHERE finished > NOW() - INTERVAL 1 HOUR;
“ NOW()-间隔1小时”将返回从现在开始1小时的时间戳。 因此,“ 完成> NOW()-间隔1小时”将比较数据库中的时间戳和从现在开始1小时之前的时间。