直接用加法就可以,把时间差换算成天,比如计算当前时间后1天5小时30分钟的时间可用: select sysdate+1+5/24+30/1440 from dual;
oracle9i中新增数据类型 interval day to second 函数有: numtodsinterval(v_sysdate2-v_sysdate1,'day')
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;DAY_DIV(SYSDATE-TO_DATE('2003- -------------------------------------------------------------------------------- 86日8时57分20秒
select sysdate+1+5/24+30/1440 from dual;
函数有:
numtodsinterval(v_sysdate2-v_sysdate1,'day')
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;DAY_DIV(SYSDATE-TO_DATE('2003-
--------------------------------------------------------------------------------
86日8时57分20秒