截断now()到mysql中只有一小时

时间:2012-08-29 07:24:57

标签: mysql sql

如何截断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())

3 个答案:

答案 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中获得更多日期时间功能。