К сожалению, нет ... Однако есть простой трюк, если он будет менее 24 часов.
Oracle предполагает, что число, добавленное к дате, находится в днях. Преобразование количества секунд в дни. Добавить текущий день, а затем использовать функцию to_date
принимать только те части вашей заинтересованы в Если у вас есть x
секунд:.
select to_char(sysdate + (x/(60 * 60 * 24)), 'HH24:MI:SS')
from dual
Это не будет работать, если есть более чем за 24 часа, хотя вы можете удалить ток данные снова и получите разницу в днях, часах, минутах и секундах.
Если вы хотите что-то наподобие: 51:10:05
, то есть 51 час, 10 минут и 5 секунд, тогда вам нужно будет использовать trunc
.
Еще раз при условии, что у вас есть x
секунд ...
- Количество часов
trunc(x/60/60)
- Количество минут
trunc((x - (trunc(x/60/60) * 60 * 60))/60)
- количество секунд поэтому
x - hours * 60 * 60 - minutes * 60
Оставляем вас с:
with hrs as (
select x, trunc(x/60/60) as h
from dual
)
, mins as (
select x, h, trunc((x - h * 60 * 60)/60) as m
from hrs
)
select h, m, x - (h * 60 * 60) - (m * 60)
from mins
Я установил SQL Fiddle для демонстрации.
Это работает хорошо. Но если часы> 99 часов, то он не работает правильно – user1430989
Смотрите мое редактирование, используя TO_CHAR вместо LPAD. Он должен обработать до 9999 часов. Если вам нужно больше, вы можете добавить дополнительные 9 в строку формата в первой функции TO_CHAR. – Mike
Это не подходит для нижнего регистра: SELECT TO_CHAR (TRUNC (76014000/3600), 'FM999999900') || 'Hrs' || TO_CHAR (TRUNC (MOD (76014000,3600)/60), 'FM00') || 'Min' FROM DUAL; –