CREATE OR REPLACE FUNCTION day_div(sec NUMBER) RETURN VARCHAR2 IS i NUMBER(20,14); y INTEGER; m INTEGER; d INTEGER; result VARCHAR2(20) ; BEGIN i:=sec/365; IF trunc(i)>0 THEN y:=trunc(i); i:=i-trunc(i); ELSE y:=0; END IF; IF i*12>0 THEN m:=trunc(i*12); i:=i*12-trunc(i*12); ELSE m:=0; END IF; IF i*30>0 THEN d:=trunc(i*30); ELSE d:=0; END IF; result:=to_char(y)||'年'||to_char(m)||'月'||to_char(d)||'日'; RETURN(Result); END day_div; /SQL> select day_div(to_date('2003-5-28','yyyy-mm-dd')-to_date('1999-4-27','yyyy-mm-dd')) from dual;DAY_DIV(TO_DATE('2003-5-28','Y ------------------------------------ 4年1月1日SQL> select day_div(to_date('2003-5-28','yyyy-mm-dd')-to_date('2000-4-26','yyyy-mm-dd')) from dual;DAY_DIV(TO_DATE('2003-5-28','Y -------------------------------------------------------------------------------- 3年1月1日
RETURN VARCHAR2
IS
i NUMBER(20,14);
y INTEGER;
m INTEGER;
d INTEGER;
result VARCHAR2(20) ;
BEGIN
i:=sec/365;
IF trunc(i)>0 THEN
y:=trunc(i);
i:=i-trunc(i);
ELSE
y:=0;
END IF;
IF i*12>0 THEN
m:=trunc(i*12);
i:=i*12-trunc(i*12);
ELSE
m:=0;
END IF;
IF i*30>0 THEN
d:=trunc(i*30);
ELSE
d:=0;
END IF;
result:=to_char(y)||'年'||to_char(m)||'月'||to_char(d)||'日';
RETURN(Result);
END day_div;
/SQL> select day_div(to_date('2003-5-28','yyyy-mm-dd')-to_date('1999-4-27','yyyy-mm-dd')) from dual;DAY_DIV(TO_DATE('2003-5-28','Y
------------------------------------
4年1月1日SQL> select day_div(to_date('2003-5-28','yyyy-mm-dd')-to_date('2000-4-26','yyyy-mm-dd')) from dual;DAY_DIV(TO_DATE('2003-5-28','Y
--------------------------------------------------------------------------------
3年1月1日