http://expert.csdn.net/Expert/topic/1586/1586867.xml?temp=.6280481

解决方案 »

  1.   

    是我没说清楚
    dt1:数据库表中存在的date型数据,精确到分钟。如某事结束时间。
    dt2:sysdate
      

  2.   

    直接相减,得出的应该不是个整数。
    其整数部分为天数,取出其小数部分*24得到小时数,
    再取出*24之后的小数部分*60为分钟,不需要精确到秒就到此为止。例如:
    dt2-dt1=1.232
    则相隔为1天,0.232*24=5.568,既5小时,0.568*60=34分钟再提示一下,用trunc(舍尾函数)来做
      

  3.   

    CREATE OR REPLACE FUNCTION day_div(p_day NUMBER) 
    RETURN VARCHAR2
    IS
      i NUMBER(20,14);
      h INTEGER;
      m INTEGER;
      s INTEGER;
      result VARCHAR2(20) ;
      d number;
    BEGIN
      i:=p_day;
      --i:=sec/3600;
      IF trunc(i)>0 THEN
        d:=trunc(i);
        i:=i-trunc(i);
      ELSE 
        d:=0;  
      END IF;
      IF i*24>0 THEN
        h:=trunc(i*24);
        i:=i*24-trunc(i*24);
      ELSE 
        h:=0;  
      END IF;
      IF i*60>0 THEN
        m:=trunc(i*60);
        i:=i*60-trunc(i*60);
      ELSE 
        m:=0;
      end if;
      if i*60>0 then
        s:=round(i*60);
      else
        s:=0;
      END IF;
      result:=to_char(d)||'日'||to_char(h)||'时'||to_char(m)||'分'||to_char(s)||'秒';
      RETURN(Result);
    END day_div;
    /SQL> select day_div(sysdate-to_date('2003-1-1','yyyy-mm-dd')) from dual;