Как преобразовать номер типа данных в дд: чч: мм: сс в Oracle после суммы - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь преобразовать числовое значение (тип данных - Number) в dd:hh:mm:ss после выполнения суммирования в Oracle.Например, у меня есть таблица, где значение, как показано ниже.Здесь значения хранятся в секундах.

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

Из приведенного выше значения я хочу суммировать значение для идентификатора 001 и преобразовать его в дд: чч: мм: сс.Как я буду делать?Пожалуйста помогите.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Может быть, вы найдете 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 ;

я хочу суммировать значение для идентификатора 001 и преобразовать в дд: чч: мм: сс

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

0 голосов
/ 09 декабря 2018

К сожалению, нет простого способа получить это.Однако мы можем вычислить дни, часы, минуты и секунды, применяя сочетание вызовов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...