Çok defa başıma gelmiş ancak her seferinde farklı kodlarla çözdüğüm bu işi
metoda dökmek istedim.
Elimizde bir numara var ve biz bunu saniye cinsinden; time formatında bir değere
kolay bir şekilde çevirmek istiyoruz.
Öncelikle IN parameter olarak numara alan ve geriye tarih ve saat döndüren
bir metod yazalım ve bunun çağrılışına bir örnek verelim.
create or replace Function NumberToTime(p_number in Number) return date is
v_time varchar2(8) := '00:00:00'; -- ilk değer atamalarımızı yapalım...
v_Result date := to_date(trunc(sysdate) ||' '|| v_time, 'dd.mm.yyyy hh24:mi:ss');
begin
-- gelen parametre dolu ise kodumuz çalışmalı
-- sıfırdan büyük rakamlar için çalışmalı
if p_number is not null and p_number > 0 then
select to_char(trunc(p_number / 3600), 'FM9900') || ':' ||
to_char(trunc(mod(p_number, 3600) / 60), 'FM00') || ':' ||
to_char(mod(p_number, 60), 'FM00')
into v_time
from dual;
end if;
v_Result := to_date(trunc(sysdate) ||' '|| v_time, 'dd.mm.yyyy hh24:mi:ss');
Return(v_Result);
Exception
When Others Then
-- herhangi bir hata olursa,
-- sysdate dönecektir.
Return(v_Result);
end NumberToTime;
------------------------------------
-- call
select NumberToTime(121) from dual;
20.09.2014 00:02:01
------------------------------------
Metodumuza 121 diye bir rakam gönderdim; geriye 2 dakika 1 saniye olarak dönmüş oldu.
Bu şekilde bir numaranın, nasıl date time'a çevrildiğini öğrenmiş olduk.