oracle的时差

 mobiledu2502910203 发布于 2023-02-12 18:23

嗨我有下表,其中包含开始时间,结束时间,总时间


STARTTIME            | ENDTIME             | TOTAL TIME TAKEN  |
02-12-2013 01:24:00  | 02-12-2013 04:17:00 |  02:53:00         |

我需要TOTAL TIME TAKEN使用oracle中的更新查询更新上面的字段

为此,我尝试了以下选择查询

select  round((endtime-starttime) * 60 * 24,2),
        endtime,
        starttime 
  from purge_archive_status_log

但是我得到了02.53,但是我的期望格式是02:53:00请让我知道我该怎么做?

1 个回答
  • 根本没有理由total_time_taken在您的表中包含该列,您可以随时计算它的值.但是如果你坚持保留它,最好将它重新创建为interval day to second数据类型列,而不是varchar2(假设它是当前的数据类型).所以这里有两个查询供您选择,一个返回interval day to second数据类型的值,另一个返回数据类型的值varchar2:

    此查询返回两个日期之间的差异作为interval day to second数据类型的值:

    SQL> with t1(starttime, endtime, total_time_taken ) as(
      2    select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss')
      3         , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss')
      4         , '02:53:00'
      5     from dual
      6  )
      7  select starttime
      8       , endtime
      9       , (endtime - starttime) day(0) to second(0) as total_time_taken
     10   from t1
     11  ;
    

    结果:

    STARTTIME            ENDTIME               TOTAL_TIME_TAKEN  
    -----------          -----------          ---------------- 
    02-12-2013 01:24:00  02-12-2013 04:17:00   +0 02:53:00        
    

    此查询返回两个日期之间的差异作为varchar2数据类型的值:

    SQL> with t1(starttime, endtime, total_time_taken ) as(
      2    select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss')
      3         , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss')
      4         , '02:53:00'
      5     from dual
      6  )
      7  select starttime
      8       , endtime
      9       , to_char(extract(hour   from res), 'fm00')  || ':' ||
     10         to_char(extract(minute from res), 'fm00')  || ':' ||
     11         to_char(extract(second from res), 'fm00') as total_time_taken
     12    from(select starttime
     13              , endtime
     14              , total_time_taken
     15              , (endtime - starttime) day(0) to second(0) as res
     16          from t1
     17        )
     18  ;
    

    结果:

    STARTTIME            ENDTIME              TOTAL_TIME_TAKEN  
    -----------          -----------          ---------------- 
    02-12-2013 01:24:00  02-12-2013 04:17:00   02:53:00 
    

    2023-02-12 18:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有