如何截断now()以在mysql中仅获得高达一小时的精度?
在
select id from Run where submitTs <= now() and submitTs >= (now() - interval 1 hour);
如果我在下午1点23分运行,我真的希望记录从下午12点到下午1点,而不是下午12点23分到下午1点23分。
所以我该怎么说
submitTs<= truncate_to_hour(now())
答案 0 :(得分:3)
尝试查询 -
SELECT
id
FROM
Run
WHERE
DATE(submitTs) = CURDATE() AND
EXTRACT(HOUR FROM NOW()) = EXTRACT(HOUR FROM submitTs)
此查询的性能优于第一个 -
SELECT
id
FROM
Run
WHERE
submitTs >= CURDATE() + INTERVAL EXTRACT(HOUR FROM NOW()) HOUR AND
submitTs < CURDATE() + INTERVAL EXTRACT(HOUR FROM NOW()) + 1 HOUR
答案 1 :(得分:1)
这样的事情应该有效:
SELECT id
FROM Run
WHERE submitTs BETWEEN CAST(CONCAT(DATE_FORMAT(NOW(), '%Y-%m-%d %h'), ':00:00') AS DATETIME)
AND CAST(CONCAT(DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%Y-%m-%d %h'), ':00:00') AS DATETIME);
答案 2 :(得分:0)
我认为这样的事情可以帮助你获得现在的一小时():
HOUR(TIME(NOW())
请参阅http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html处的参考资料,以便在mysql中获得更多日期时间功能。