1. 程式人生 > >秒轉為時分秒的oracle函式

秒轉為時分秒的oracle函式

create or replace function GETTIMEDESC(seconds in integer) return  varchar2 is
  Result varchar2(100);
begin
  Result := '1t';
  
  if (seconds<24*3600) then
      select to_char(to_date(mod(seconds,3600*24),'sssss'),'fmhh24"小時"mi"分"ss"秒"') into Result from dual;
  else  
      select trunc(seconds/3600/24) || '天' || to_char(to_date(mod(seconds,3600*24),'sssss'),'fmhh24"小時"mi"分"ss"秒"') into Result from dual; 
  end if;
  
  return(Result);
end GETTIMEDESC;

這個函式沒有太多的技術含量,記錄下來。網上找了好久,後來也是看一個答案,稍加改造而來

呼叫sql語句 select  GETTIMEDESC(500000) m from dual; 

好像又回去了,寫來寫去,感覺很簡單,但是網上就沒有這個現成的答案,簡單是事情我來做。

除錯了好久,發現上面的寫法是有問題的,換個寫法,搞了好久,實在是不成了,只好整個笨辦法,麻煩點,但肯定是對的。

create or replace function GETTIMEDESC(seconds in number) return  varchar2 is
  Result varchar2(100);
  --DaySeconds number;
  TempSconds number;
begin
  Result := '';
  
  --DaySeconds := 24*3600;
  TempSconds := seconds;
  
  if (seconds is null) then
     return '';
  end if;
  
  --天數
  if (seconds>=86400) then
      Result := round(seconds/86400) || '天';
      TempSconds := mod(seconds,86400);
  else
     Result := '0天';
  end if;
  
  --小時
  if (TempSconds>=3600) then
      Result := Result || round(TempSconds/3600) || '小時';
      TempSconds := mod(TempSconds,3600);
   else
      Result := Result || '0小時';
   end if;
   
   --分鐘
  if (TempSconds>=60) then
      Result := Result || round(TempSconds/60) || '分鐘';
      TempSconds := mod(TempSconds,60);
  else
     Result := Result || '0分鐘';
  end if;
  
  Result := Result || to_char(round(TempSconds)) || '秒';
  
  return(Result);
  
end GETTIMEDESC;

對自己來說是個記錄,希望對需要的人能或多或少地幫助一點點