我有一个日期时间格式的时间列表
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
我有一个日期时间格式的时间列表
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 函数从日期时间值中提取分钟部分。如果小于 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