【问题标题】:Getting HH:mm version of total minutes in SQL在 SQL 中获取总分钟数的 HH:mm 版本
【发布时间】:2020-09-24 12:16:55
【问题描述】:

我有一列是用户在某项任务上花费的总分钟数。使用此列:

(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()。所以我认为这可能是它自己的问题。

【问题讨论】:

  • 数据库是 Oracle、SQLServer、MySQL ... ?还请提供一个小示例表和预期结果。不仅是一个示例(就像您所做的那样),还有表中的 2 或 3 个数据(带有 TotalTimeOtherTasks 和 operatorID 列)以及您的预期结果......

标签: sql sql-server tsql date sum


【解决方案1】:

一种方法是分别计算分钟和秒,然后将它们连接起来

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() 已经返回一个整数。

【讨论】:

  • 搞定了,谢谢!认为我只是对我看到的所有示例感到困惑,并且没有正确执行它们。
【解决方案2】:

虽然答案已经被接受,但我将发布我在 MySQL 中工作的解决方案。 从这里参考:Convert number of minutes to 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

【讨论】:

  • 我认为他们正在使用 SQL Server(基于问题中的 DATEDIFF() 语法)。
猜你喜欢
  • 2020-05-11
  • 2021-10-23
  • 1970-01-01
  • 2013-07-18
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多