Home > Database > Mysql Tutorial > body text

pl/sql converts dates in numeric format to dates

大家讲道理
Release: 2016-11-12 09:28:08
Original
1968 people have browsed it

--将用小数形式表示的 日期时间  转化为 天-小时-分钟-秒 的形式
function fmt_time (p_days in number) return varchar2
as
  l_days            number;
  l_hours           number;
  l_minutes         number;
  l_seconds         number;
  l_sign            varchar2(1);
  l_returnvalue     string_util_pkg.t_max_pl_varchar2;
begin
 
  /*
 
  Purpose:    get time formatted as days, hours, minutes, seconds
 
  Remarks:
 
  Who     Date        Description
  ------  ----------  -------------------------------------
  MBR     18.12.2006  Created
 
  */
  --通过传入的 日期获得相应的 各个单位数据
  --整数部分为 天
  l_days := nvl(trunc(p_days),0);
  --小数部分 *24 得到小时
  l_hours := nvl(((p_days - l_days) * 24), 0);
  --获得的小时 数据的小数部分 *60 为分钟
  l_minutes := nvl(((l_hours - trunc(l_hours))) * 60, 0);
  --同样的 将获得的 分钟的小数部分*60 为秒
  l_seconds := nvl(((l_minutes - trunc(l_minutes))) * 60, 0);
  --判断日期正负 符号
  if p_days < 0 then
    l_sign:=&#39;minus &#39;;
  else
    l_sign:=&#39;&#39;;
  end if;
  --将得到的数据 进行格式化  绝对值是为了进行必要的 去除正负号判定
  --获得天的绝对值
  l_days:=abs(l_days);
  --获得小时的绝对值 同时获得其整数部分
  l_hours:=trunc(abs(l_hours));
  --去取分钟的绝对值 然后四舍五入
  l_minutes:=round(abs(l_minutes));
  --去取秒的绝对值 然后四舍五入
  l_seconds:=round(abs(l_seconds));
  --如果分钟 为60  为什么会出现这种情况呢? 这是因为有了四舍五入和小数 不精确所致
  if l_minutes = 60 then
    --则 让小时+1 同时分钟置空
    l_hours:=l_hours + 1;
    l_minutes:=0;
  end if;
  --将得到的结果 进行格式化输出
  --采用 天-》小时-》分钟的判断顺序 是为了 能够决定那个 字段木有值
  if l_days > 0 then
    l_returnvalue:=string_util_pkg.get_str(&#39;%1 days, %2 hours, %3 minutes&#39;, l_days, l_hours, l_minutes);
  elsif l_hours > 0 then
    l_returnvalue:=string_util_pkg.get_str(&#39;%1 hours, %2 minutes, %3 seconds&#39;, l_hours, l_minutes, l_seconds);
  elsif l_minutes > 0 then
    l_returnvalue:=string_util_pkg.get_str(&#39;%1 minutes, %2 seconds&#39;, l_minutes, l_seconds);
  else
    l_returnvalue:=string_util_pkg.get_str(&#39;%1 seconds&#39;, l_seconds);
  end if;
  --加上 符号
  l_returnvalue:=l_sign || l_returnvalue;
 
  return l_returnvalue;
 
end fmt_time;
Copy after login

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template