如何按小时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

这里有一种方法:

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

为了稍微放松一下:我们使用MINUTE函数从datetime值中提取minutes部分。如果小于30,则指定"00"作为分钟部分,否则指定"30"。剩下的只是格式化。%l给出了从1到12的小时值,没有零填充。%p为我们获取"AM"或"PM"值。(如果需要小写,那么可以将整个DATE_FORMAT表达式封装在lower()函数中。

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

最新更新