1

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

我的表中有一个日期列,称为“日期”。格式为“YYYY-MM-DD HH:MM:SS”。

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

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

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

任何帮助都会很棒。

最好的问候,切斯克。

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

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

4 回答 4

5

我建议为小时比较减去 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);
于 2014-12-29T16:04:13.233 回答
3

你知道,这比使用该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`)
于 2014-12-29T16:10:20.553 回答
1

尝试:

WHERE DATE_FORMAT(date, '%Y %h:%i') BETWEEN '2014 08:30' AND '2014 18:30'
于 2014-12-29T16:06:42.287 回答
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
于 2014-12-29T16:01:03.490 回答