首页 文章

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

提问于
浏览
0

我想在Oracle中进行求和后将Number值(数据类型 - Number )转换为 dd:hh:mm:ss . 例如,我有一个表格,其中的值如下所示 . 这里的值存储为秒 .

ID   Value
----------------------
001  125698
002  5698233
001  896398233

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

2 回答

  • 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
    
  • 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

相关问题