Monday, 4 May 2009

Generate Exact Age

-- You can use this for generating the Time Difference "in words". (you have to add one more input for end date, replace sysdate with that input).
-- Returns Varchar2

FUNCTION F_AGE(DOB DATE) RETURN VARCHAR2
AS

YR NUMBER;
MM NUMBER;
DD NUMBER;
AGE VARCHAR2(150);
TM DATE;
HH NUMBER;
MI NUMBER;
MIS NUMBER;

BEGIN

YR := Trunc(Months_Between(SYSDATE, DOB)/12);
MM := Abs(To_Char(SYSDATE,'MM')-To_Char(DOB,'MM'));
DD := Abs(To_Char(SYSDATE,'DD')-To_Char(DOB,'DD'));
TM := To_Date(To_Char(SYSDATE,'DD-MM-RRRR')||' '||To_Char(dob,'HH24MI'),'DD-MM-RRRR HH24MI');
HH := TRUNC((SYSDATE-TM)*24);
MIS := ROUND((SYSDATE-TM)*1440);
MI := MIS - (HH*60);

BEGIN
SELECT Decode(Nvl(YR,0),'0',NULL,Decode(YR,'1',YR||' Year ' ,YR||' Years ' ))||
Decode(Nvl(MM,0),'0',NULL,Decode(MM,'1',MM||' Month ' ,MM||' Months ' ))||
Decode(Nvl(DD,0),'0',NULL,Decode(DD,'1',DD||' Day ' ,DD||' Days ' ))||
Decode(Nvl(HH,0),'0',NULL,Decode(HH,'1',HH||' Hour ' ,HH||' Hours ' ))||
Decode(Nvl(MI,0),'0',NULL,Decode(MI,'1',MI||' Minute' ,MI||' Minutes' ))
INTO age
FROM dual;
END;

RETURN(AGE);
END;

No comments:

Post a Comment