如何截断 now() 以在 mysql 中仅获得高达小时的精度?
在
select id from Run where submitTs <= now() and submitTs >= (now() - interval 1 hour);
如果我在 1.23 PM 运行,我真的想要从 12.00 PM 到 1 PM 而不是 12.23 PM 到 1.23 PM 的记录。
那我怎么说
submitTs<= truncate_to_hour(now())
试试这个查询 -
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
像这样的东西应该工作:
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);
我认为这样的事情可以帮助你获得现在的时间():
HOUR(TIME(NOW())
请参阅http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html中的参考,以在 mysql 中获取更多日期时间函数。