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

解决方案 »

  1.   

    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日