2013-02-22 148 views
0

我有日期时间格式的时间列表如何通过小时30分钟组

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 
+1

这不是分组,你想做的只是纯粹的美学。 – 2013-02-22 01:20:47

+0

我不得不以30分钟为间隔进行分组。我认为这是方式。 – Val 2013-02-22 01:22:53

回答

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 
1

这里有一种方法:

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

要解开这一点:我们使用MINUTE函数来提取分钟部分从日期时间值。如果小于30,那么我们指定'00'作为分钟部分,否则我们指定'30'。其余的只是格式化。 %l给我们从1到12的小时值,没有零填充。 %p为我们提供'AM'或'PM'值。 (如果你需要小写,那么你可以将整个DATE_FORMAT表达式包装在LOWER()函数中。

+0

这很干净! – Val 2013-02-22 17:16:38