视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
pl/sql对采用数字格式的日期进行日期的转换
2020-11-09 09:17:31 责编:小采
文档

--将用小数形式表示的 日期时间 转化为 天-小时-分钟-秒 的形式
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;

下载本文
显示全文
专题