我有一个日期时间格式的列表
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
答案 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