0

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

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
4

2 回答 2

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() 函数中。

于 2013-02-22T02:57:07.480 回答
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
于 2013-02-22T01:21:33.707 回答