在两个日期之间查询&分钟

时间:2014-12-29 15:50:24

标签: mysql hour minute

我的mysql查询有问题,似乎无法找到任何相关内容。

我的表中有一个Date列,名为" date"。格式为" YYYY-MM-DD HH:MM:SS"。

我正在尝试计算几天内的所有数据,但仅限于日期介于08:30:00和18:30:00之间。

我知道如何使用HOUR(日期),但我不知道如何在查询中整合分钟。

我一直在考虑使用案例,但我对它不太确定。

任何帮助都会很棒。

祝你好运, Cheskq。

使用我一直在做的查询进行编辑:

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014
AND HOUR(date) between 08 and 19
group by YEAR(date), MONTH(date), DAY(date);

4 个答案:

答案 0 :(得分:2)

我建议减去30分钟的小时比较:

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014 AND
      HOUR(date - interval 30 minute) between 08 and 17
group by YEAR(date), MONTH(date), DAY(date);

请注意,上限为17,假设间隔在18:30:00之前结束(例如,在18:29:59.999)。

您也可以将其表达为:

select count(*), YEAR(date), MONTH(date), DAY(date)
from table
where YEAR(date) = 2014 AND
      TIME(date) BETWEEN TIME('08:30:00') and TIME('18:30:00')
group by YEAR(date), MONTH(date), DAY(date);

答案 1 :(得分:2)

我知道,这比使用TIME()函数时看起来更容易。

SELECT COUNT(*), DATE(`date`)
  FROM table
 WHERE TIME(`date`) BETWEEN '08:30' AND '18:30'
 GROUP BY DATE(`date`)

如果你想要8:30但不包括18:30,请改用它。 BETWEEN众所周知,当用于时间范围时会给出一个错误。

SELECT COUNT(*), DATE(`date`)
  FROM table
 WHERE TIME(`date`) >= '08:30'
   AND TIME(`date`) <  '18:30'
 GROUP BY DATE(`date`)

答案 2 :(得分:0)

同时使用MINUTE(date)

WHERE (HOUR(date) = 8 AND MINUTE(date) >= 30) OR     # 08:30 - 09:00
      (HOUR(date) > 8 AND HOUR(date) < 18) OR        # 09:00 - 18:00
      (HOUR(date) = 18 AND MINUTE(date) <= 30)       # 18:00 - 18:30

答案 3 :(得分:0)

尝试:

WHERE DATE_FORMAT(date, '%Y %h:%i') BETWEEN '2014 08:30' AND '2014 18:30'