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;
dt1:数据库表中存在的date型数据,精确到分钟。如某事结束时间。
dt2:sysdate
其整数部分为天数,取出其小数部分*24得到小时数,
再取出*24之后的小数部分*60为分钟,不需要精确到秒就到此为止。例如:
dt2-dt1=1.232
则相隔为1天,0.232*24=5.568,既5小时,0.568*60=34分钟再提示一下,用trunc(舍尾函数)来做
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;