如何把 两个时间相减后 得到 XX天XX小时的格式dt1: 2011-02-28 14:43:33dt2: 2011-03-2  4:43:33用 dt2 - dt1 后 ,结果希望是 XX天XX小时在线等

解决方案 »

  1.   

    create or replace function get_days(start_Time VARCHAR2, end_time varchar2)
      return varchar2 IS
      flag           VARCHAR2(200);
      status_failure VARCHAR2(200);
      xs_cha         number; 
      days_cha       number;
    BEGIN  select substr(start_Time, 9, 2) - substr(end_time, 9, 2)
        into xs_cha
        from dual;
      if xs_cha >= 0
       then
        select to_Date(substr(start_Time, 1, 8), 'yyyy-mm-dd hh24:mi:ss') -
               to_Date(substr(end_time, 1, 8), 'yyyy-mm-dd hh24:mi:ss')
          into days_cha
          from dual;
          
          return days_cha || '天' || xs_cha || '小时';
      elsif
         xs_cha<0
         
     then 
         select to_Date(substr(start_Time, 1, 8), 'yyyy-mm-dd hh24:mi:ss') -
               to_Date(substr(end_time, 1, 8), 'yyyy-mm-dd hh24:mi:ss') -1 
          into days_cha
          from dual;
       
     select substr(start_Time, 9, 2)+24 - substr(end_time, 9, 2)
        into xs_cha
        from dual;
      return days_cha || '天' || xs_cha || '小时';
       end if ;
    EXCEPTION
      WHEN OTHERS THEN
        status_failure := TO_CHAR(SQLCODE) || ': ' || SUBSTR(SQLERRM, 1, 980);
        proc_write_log(status_failure, 'systemerr.txt');
        RETURN '1';
    END;
      

  2.   

    SELECT    EXTRACT
                 (DAY FROM NUMTODSINTERVAL (  TO_DATE ('2011-03-2 4:43:33',
                                                       'yyyy-mm-dd hh24:mi:ss'
                                                      )
                                            - TO_DATE ('2011-02-28 14:43:33',
                                                       'yyyy-mm-dd hh24:mi:ss'
                                                      ),
                                            'day'
                                           )
                 )
           || '天'
           || EXTRACT
                    (HOUR FROM NUMTODSINTERVAL (  TO_DATE ('2011-03-2 4:43:33',
                                                           'yyyy-mm-dd hh24:mi:ss'
                                                          )
                                                - TO_DATE ('2011-02-28 14:43:33',
                                                           'yyyy-mm-dd hh24:mi:ss'
                                                          ),
                                                'day'
                                               )
                    )
           || '小时' INTERVAL
      FROM DUAL;
      

  3.   

    我的这个sql可以SQL> select  trunc(dt) || '天' ||trunc((dt - trunc(dt)) * 24) || '小时'
      2   from(
      3        select to_date('2011-03-2 4:43:33','yyyy-mm-dd hh24:mi:ss') - to_date('2011-02-28 14:43:33','yyyy-mm-dd hh24:mi:ss') dt
      4          from dual
      5         );
     
    TRUNC(DT)||'天'||TRUNC((DT-TRU
    ------------------------------
    1天13小时
     
    SQL> 
    SQL> select  trunc(dt) || '天' ||trunc((dt - trunc(dt)) * 24) || '小时'||
      2          trunc((dt * 24 - trunc(dt * 24)) * 60) || '分' ||
      3          trunc((dt * 1440 - trunc(dt * 1440)) *60) || '秒'
      4   from(
      5        select to_date('2011-03-2 4:43:33','yyyy-mm-dd hh24:mi:ss') - to_date('2011-02-28 14:43:33','yyyy-mm-dd hh24:mi:ss') dt
      6          from dual
      7         );
     
    TRUNC(DT)||'天'||TRUNC((DT-TRU
    ------------------------------
    1天13小时59分59秒
      

  4.   

    第一个sql是显示天和小时数
    第一个sql对第一个进行了扩展,显示:天数、小时数、分数和秒数
      

  5.   

    有些数据库版本还可以使用以下sql来实现。select extract(day from dt) "天",
           extract(hours from dt) "小时"
      from (
            select to_date('2011-03-2 4:43:33','yyyy-mm-dd hh24:mi:ss') - to_date('2011-02-28 14:43:33','yyyy-mm-dd hh24:mi:ss') dt
              from dual
           );