> 데이터 베이스 > MySQL 튜토리얼 > pl/sql对采用数字格式的日期进行日期的转换

pl/sql对采用数字格式的日期进行日期的转换

WBOY
풀어 주다: 2016-06-07 14:55:00
원래의
2330명이 탐색했습니다.

现实中会有一种计算方法将时间计算为一个浮点数的形式来保存,这个时候就需要将其转为为可以看得懂的 日期格式 PL/SQL 数字化日期 --将用小数形式表示的 日期时间 转化为 天-小时-分钟-秒 的形式function fmt_time (p_days in number) return varchar2as l_da

现实中会有一种计算方法将时间计算为一个浮点数的形式来保存,这个时候就需要将其转为为可以看得懂的 日期格式 PL/SQL 数字化日期
--将用小数形式表示的 日期时间  转化为 天-小时-分钟-秒 的形式
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:='minus ';
  else
    l_sign:='';
  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('%1 days, %2 hours, %3 minutes', l_days, l_hours, l_minutes);
  elsif l_hours > 0 then
    l_returnvalue:=string_util_pkg.get_str('%1 hours, %2 minutes, %3 seconds', l_hours, l_minutes, l_seconds);
  elsif l_minutes > 0 then
    l_returnvalue:=string_util_pkg.get_str('%1 minutes, %2 seconds', l_minutes, l_seconds);
  else
    l_returnvalue:=string_util_pkg.get_str('%1 seconds', l_seconds);
  end if;
  --加上 符号
  l_returnvalue:=l_sign || l_returnvalue;

  return l_returnvalue;

end fmt_time;
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿