总和后如何在Oracle中将数据类型编号转换为dd:hh:mm:ss

时间:2018-12-09 10:07:35

标签: oracle

在Oracle中进行求和后,我试图将Number值(数据类型-Single)转换为Number。例如,我有一个表,其中的值如下所示。此处的值存储为秒。

dd:hh:mm:ss

从上述值中,我想对ID 001 的值求和并转换为dd:hh:mm:ss。我该怎么办?请协助。

2 个答案:

答案 0 :(得分:1)

也许您发现NUMTODSINTERVAL函数很有用。示例(Oracle 11g)

-- test table: NUMBERS
create table numbers ( id_, value_ ) as
select '001',    125698 from dual union all
select '002',   5698233 from dual union all
select '001', 896398233 from dual ;
  

我想对ID 001的值求和并转换为dd:hh:mm:ss

select 
  numtodsinterval( sum( value_ ), 'second' ) 
from numbers
where id_ = '001'
;

-- result
NUMTODSINTERVAL(SUM(VALUE_),'SECOND')  
+10376 10:25:31.000000 

您可以EXTRACT从结果中获取天/小时/分钟/秒,并使用串联运算符添加一些':'字符。

select
  extract( day from interval_ )    || ':' ||
  extract( hour from interval_ )   || ':' ||
  extract( minute from interval_ ) || ':' ||
  extract( second from interval_ ) dhms
from (
  select 
    numtodsinterval( sum( value_ ), 'second' ) interval_
  from numbers
  where id_ = '001'
)
;

-- result
DHMS            
10376:10:25:31

另请参阅:dbfiddle

答案 1 :(得分:0)

不幸的是,没有简单的方法可以得出这个结果。但是,我们可以通过应用floor()mod()的混合调用来计算天,小时,分钟和秒,如下所示:

select id
       , value
       , floor(value / 86400) as days
       , floor(mod(value, 86400) / 3600) as hours
       , floor(mod(value, 3600) / 60) as mins
       , mod(value, 60) as secs
from your_table