Niestety nie ... Jednak istnieje prosty trik, jeśli będzie to mniej niż 24 godzin.
Oracle zakłada, że liczba dodana do daty to dni. Konwertuj liczbę sekund na dni. Dodaj bieżący dzień, a następnie użyj funkcji to_date
wziąć tylko części Twój zainteresowanych Zakładając masz x
sekund.
select to_char(sysdate + (x/(60 * 60 * 24)), 'HH24:MI:SS')
from dual
to nie będzie działać, jeśli nie więcej niż 24 godzin, choć można usunąć prąd danych ponownie i uzyskaj różnicę w dniach, godzinach, minutach i sekundach.
Jeśli chcesz coś takiego: 51:10:05
, tj. 51 godzin, 10 minut i 5 sekund, będziesz musiał użyć trunc
.
Ponownie zakładając, że masz x
sekund ...
- Liczba godzinach
trunc(x/60/60)
- liczba minut jest
trunc((x - (trunc(x/60/60) * 60 * 60))/60)
- liczba sekund jest więc
x - hours * 60 * 60 - minutes * 60
Zostawiono Ci:
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
Przygotowałem zestaw SQL Fiddle do demonstracji.
To działa dobrze. Ale jeśli godziny> 99 godzin to nie działa poprawnie – user1430989
Zobacz moją edycję za pomocą TO_CHAR zamiast LPAD. Powinien zająć do 9999 godzin. Jeśli potrzebujesz więcej, możesz dodać dodatkowe 9 do ciągu formatu w pierwszej funkcji TO_CHAR. – Mike
To nie przychodzi poprawnie dla poniższego przypadku: SELECT TO_CHAR (TRUNC (76014000/3600), 'FM999999900') || "H" || TO_CHAR (TRUNC (MOD (76014000,3600)/60), "FM00") || "Min" Z PODWÓJNEGO; –