number to_tıme() metodu hazırlama

 

Ç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.