使用场景:一般用于两个时间之间的耗时。如图结束时间为空即使用系统时间。
第一步、写一个转换函数 这个函数的目的是将两个时间差的秒数 转为 x天x时x分x秒。
create or replace function GETTIMEDESC(seconds in number) return varchar2 is Result varchar2(100); --DaySeconds number; 将xxx秒 转为 x天x时x分x秒 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(replace(Result,'0天','')); end GETTIMEDESC;
第二步、调用函数转换,实例如下。
1)、借用表查询展示
表字段1 business_start_time date 业务开始时间
表字段2 business_end_time date 业务结束时间
SELECT BUSINESS_START_TIME 开始时间, --开始时间 BUSINESS_END_TIME 结束时间, --结束时间 ROUND(TO_NUMBER(NVL(BUSINESS_END_TIME, SYSDATE) - BUSINESS_START_TIME) * 24 * 60 * 60) 秒数差, --结束时间-开始时间得到秒数差 GETTIMEDESC(ROUND(TO_NUMBER(NVL(BUSINESS_END_TIME, SYSDATE) - BUSINESS_START_TIME) * 24 * 60 * 60)) 时间差 --调用函数转换 FROM STS_EVENT;
2)、借用dual来展示
SELECT TO_DATE('2019/5/20 14:32:26', 'yyyy-MM-dd hh24:mi:ss') 结束时间, --结束时间 TO_DATE('2019/5/20 10:23:01', 'yyyy-MM-dd hh24:mi:ss') 开始时间, --开始时间 TO_NUMBER(TO_DATE('2019/5/20 14:32:26', 'yyyy-MM-dd hh24:mi:ss') - TO_DATE('2019/5/20 10:23:01', 'yyyy-MM-dd hh24:mi:ss')) * 24 * 60 * 60 秒数差, --秒数差=(结束时间-开始时间)* 24 * 60 * 60 GETTIMEDESC(TO_NUMBER(TO_DATE('2019/5/20 14:32:26', 'yyyy-MM-dd hh24:mi:ss') - TO_DATE('2019/5/20 10:23:01', 'yyyy-MM-dd hh24:mi:ss')) * 24 * 60 * 60) 时间差 --调用函数将秒数转为时间 FROM DUAL;
完结。。。完美解决。