获取sql中总分钟数的hh:mm版本

qc6wkl3g  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(283)

我有一个列,它是用户在一项任务上花费的总分钟数的总和。此列是通过以下方式获得的:

(sum(cast(LTRIM(DATEDIFF(SECOND, 0, TotalTimeOtherTasks))as int)) over (partition by headLogs.operatorID)/60) as TotalTimeOtherTasks

返回315。totaltimeothertasks是该任务的一列时间,例如00:30:23 01:05:55
我想用hh:mm格式做这个节目,315=05:15。
我试过为类似的问题做其他的回答,比如;使用单独的公式并将它们串联起来,但会出现错误,例如“05:15”一旦得到答案就无法转换为int,或者“':'未被识别为公式的一部分”。如果我转换它,我就不能使用sum()。所以我认为这可能是它自己的问题。

ui7jx7zq

ui7jx7zq1#

一种方法是分别计算分和秒,然后把它们连在一起

concat(
    sum(datediff(second, 0, TotalTimeOtherTasks)) 
        over (partition by headLogs.operatorID) / 60,
    ':',
    sum(datediff(second, 0, TotalTimeOtherTasks)) 
        over (partition by headLogs.operatorID) % 60
) as TotalTimeOtherTasks

请注意,我删除了铸造,这在这里似乎是不必要的:在大多数数据库中, datediff() 已返回整数。

sczxawaw

sczxawaw2#

虽然答案已经被接受了,但我将发布我的解决方案,它在mysql中工作。此处引用:将分钟数转换为hh:mm
假设下表结构

create table total_minutes(
    id bigint(20) NOT NULL AUTO_INCREMENT,
    total_time int,
    primary key(id)
);
SELECT total_time, floor(total_time/60) as hours, lpad(floor(total_time%60), 2, '0') as minutes,
concat(floor(total_time/60), ":", lpad(floor(total_time%60), 2, '0')) as hh_mm FROM classifiedads.total_minutes;

给予

t   h   m   hh:mm
35  0   35  0:35
95  1   35  1:35
69  1   9   1:09

相关问题