Sql 使用sum()添加时间类型的所有值

Sql 使用sum()添加时间类型的所有值,sql,string,oracle,datetime,sum,Sql,String,Oracle,Datetime,Sum,我在一个表中有一列,它的值是类似时间的类型 01:12和05:14 我想使用sum来添加值,并得到与06:26相同类型的结果 我用这个代码来做我想做的事 CASE WHEN SUM (min) = 60 THEN TO_CHAR (SUM (hour) + 1) || ':00' WHEN SUM (min) < 60 THEN TO_CHAR (S

我在一个表中有一列,它的值是类似时间的类型 01:12和05:14 我想使用sum来添加值,并得到与06:26相同类型的结果 我用这个代码来做我想做的事

CASE
          WHEN SUM (min) = 60
          THEN
              TO_CHAR (SUM (hour) + 1) || ':00'
          WHEN SUM (min) < 60
          THEN
                 TO_CHAR (SUM (hour))
              || ':'
              || TO_CHAR (SUM (min))
          ELSE
                 TO_CHAR (
                       SUM (hour)
                     + (  SUM (min)/60
                        -   (MOD (
                                 SUM (min),60)/60))
                          )
              || ':'
              || TO_CHAR (
                     
                         MOD (
                                 SUM (min),60))                 
      END
案例
当总和(最小值)=60
然后
TO|CHAR(总和(小时)+1)| |’:00
当总和(最小值)<60
然后
至_CHAR(总和(小时))
|| ':'
||至字符(总和(最小))
其他的
托查(
总数(小时)
+(总和(分钟)/60
-(国防部)(
总和(最小值),60)/60)
)
|| ':'
||托查(
国防部(
总和(最小值),60%)
结束

虽然成功了,但有点复杂。。。有什么比我做的更简单的吗…请告诉我。。。谢谢

您可以使用算术,然后使用字符串函数

如果在单独的列中显示总小时和分钟数:

floor(sum(hour * 60 + min) / 60 total_hours,
mod(sum(hour * 60 + min), 60) total_minutes
如果要将结果格式化为
HH24:MI

lpad(floor(sum(hour * 60 + min) / 60), 2, '0') 
    || ':'
    || lpad(mod(sum(hour * 60 + min), 60), 2, '0') total_time
如果从格式为“HH24:MI”的字符串开始(与查询中显示的内容相反):

with t as (
    select 1 hour, 12 min from dual 
    union all select 6 hour, 26 min from dual
)
select lpad(floor(sum(hour * 60 + min) / 60), 2, '0') 
    || ':'
    || lpad(mod(sum(hour * 60 + min), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38      |


with t as (
    select '01:12' col from dual
    union all select '06:26' from dual
)
select lpad(floor(sum(substr(col, 1, 2) * 60 + substr(col, -2)) / 60), 2, '0') 
    || ':'
    || lpad(mod(sum(substr(col, 1, 2) * 60 + substr(col, -2)), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38      |

谢谢你,但我正在寻找的东西,不需要分分钟和小时。。。时间列中的数据是这样的06:07,我将小时和分钟分开。。。不管你的代码是什么,谢谢你easier@FatemehAzizkhani:ok-您的查询中未显示该选项。请参阅我的编辑。
with t as (
    select 1 hour, 12 min from dual 
    union all select 6 hour, 26 min from dual
)
select lpad(floor(sum(hour * 60 + min) / 60), 2, '0') 
    || ':'
    || lpad(mod(sum(hour * 60 + min), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38      |


with t as (
    select '01:12' col from dual
    union all select '06:26' from dual
)
select lpad(floor(sum(substr(col, 1, 2) * 60 + substr(col, -2)) / 60), 2, '0') 
    || ':'
    || lpad(mod(sum(substr(col, 1, 2) * 60 + substr(col, -2)), 60), 2, '0') total_time
from t

| TOTAL_TIME |
| :--------- |
| 07:38      |