如何按小时和30分钟分组

时间:2013-02-22 01:19:17

标签: mysql

我有一个日期时间格式的列表

datetime action
11:13:40 eat
12:33:40 sleep
14:44:40 walk
14:55:40 eat
14:59:40 call

我想分组

11:00am eat
12:30pm eat
2:30pm walk
2:30pm eat
2:30pm call

2 个答案:

答案 0 :(得分:1)

以这种方式:

SELECT DATE_FORMAT(`datetime`,IF(MINUTE(`datetime`)<30,'%l:00%p','%l:30%p'))
     , action
  FROM ...
 ORDER BY 1

稍微展开一下:我们使用MINUTE函数从datetime值中提取分钟部分。如果小于30,那么我们指定&#39; 00&#39;作为分钟部分,否则,我们指定&#39; 30&#39;。其余的只是格式化。 %l给出了1到12的小时值,没有零填充。 %p让我们感受到了上午&#39; AM&#39;或者&#39; PM&#39;值。 (如果你需要小写,那么你可以将整个DATE_FORMAT表达式包装在LOWER()函数中。

答案 1 :(得分:0)

SELECT REPLACE(DATE_FORMAT(datetime,'%h %p'),
               ' ' ,
               IF(CEIL(MINUTE(datetime)/30)*30=60,':30 ',':00 '))  AS hour_time
       , action    
FROM table1
GROUP BY 1