oracle将日期差转换为时分秒格式

要求:
计算2021/03/03 16:28:00 - 2021/03/03 14:25:01 = 02:02:59
如果时间差小于一天,可以用以下简写方法

with tab1 as (
select to_date('2021/03/03 16:28:00', 'yyyy/mm/dd hh24:mi:ss') -
       to_date('2021/03/03 14:25:01', 'yyyy/mm/dd hh24:mi:ss') tim
  from dual
)
select to_char(trunc(sysdate) + t1.tim, 'hh24:mi:ss')
  from tab1 t1
;

如果时间差大于一天,并且要求多出的天加到小时上
例如2021/03/03 16:28:00 - 2021/03/02 14:25:01 = 26:02:59

with tab1 as (
select to_date('2021/03/03 16:28:00', 'yyyy/mm/dd hh24:mi:ss') -
       to_date('2021/03/02 14:25:01', 'yyyy/mm/dd hh24:mi:ss') tim
  from dual
)
select trunc(t1.tim) * 24 + to_char(trunc(sysdate) + t1.tim, 'hh24') ||
       to_char(trunc(sysdate) + t1.tim, ':mi:ss')
  from tab1 t1
;

如果在之前的基础上再要求日期差可以为负数,那么应该这样写

with tab1 as (
select to_date('2021/03/02 14:25:01', 'yyyy/mm/dd hh24:mi:ss') - 
       to_date('2021/03/03 16:28:00', 'yyyy/mm/dd hh24:mi:ss') tim
  from dual
)
select decode(sign(t1.tim), -1, '-', '') ||
       (trunc(abs(t1.tim)) * 24 + to_char(trunc(sysdate) + abs(t1.tim), 'hh24')) ||
       to_char(trunc(sysdate) + abs(t1.tim), ':mi:ss')
  from tab1 t1
;

原理:在oracle中日期格式相减的值的单位为天,用这个天数加上各种日期函数就可以得出时分秒格式的结果。

为了使用方便,也可以将上述代码封装到函数中使用。

create or replace function test_0303(p_date_num number)
return varchar2 is 
 v_res varchar2(50);
begin

  select trunc(p_date_num) * 24 + to_char(trunc(sysdate) + abs(p_date_num), 'hh24') ||
         to_char(trunc(sysdate) + abs(p_date_num), ':mi:ss')
         into v_res
    from dual t1
  ;
  return v_res;
end;

通过函数调用

select test_0303(
           to_date('2021/03/03 16:28:00', 'yyyy/mm/dd hh24:mi:ss') -
           to_date('2021/03/03 14:25:01', 'yyyy/mm/dd hh24:mi:ss')
       ) from dual;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值