在Oracle中进行求和后,我试图将Number值(数据类型-Single
)转换为Number
。例如,我有一个表,其中的值如下所示。此处的值存储为秒。
dd:hh:mm:ss
从上述值中,我想对ID 001 的值求和并转换为dd:hh:mm:ss。我该怎么办?请协助。
答案 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