I had a similar problem when I was requested to calculate age of Patients in Years, Months and Days. I did not find any solution and had to create the below for my rescue. I hope this helps everyone, until we have a inbuilt function which calculates age accurately in Years, Months and Days. select CONCAT( CASE WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) - 1 ,' Month ',30 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) - 1 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) - 1 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) - 1 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 11 ,' Month ',3 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 11 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 11 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 11 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ',30 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) > DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ',31 - (DAY(dob) - DAY(CURDATE())) ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - (MONTH(dob) - MONTH(CURDATE())) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) = DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', 0 ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - MONTH(dob) + MONTH(CURDATE()) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - MONTH(dob) + MONTH(CURDATE()) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - MONTH(dob) + MONTH(CURDATE()) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) > MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - 1 - YEAR(dob), ' Year ', 12 - MONTH(dob) + MONTH(CURDATE()) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) = MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', 0 ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 1) OR (MONTH(CURDATE()) = 3) OR (MONTH(CURDATE()) = 5) OR (MONTH(CURDATE()) = 7) OR (MONTH(CURDATE()) = 8) OR (MONTH(CURDATE()) = 10) OR (MONTH(CURDATE()) = 12)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND ((MONTH(CURDATE()) = 4) OR (MONTH(CURDATE()) = 6) OR (MONTH(CURDATE()) = 9) OR (MONTH(CURDATE()) = 11)) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) = 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) WHEN DAY(dob) < DAY(CURDATE()) AND (MONTH(dob) < MONTH(CURDATE())) AND (MONTH(CURDATE()) = 2) AND (MOD(YEAR(CURDATE()),4) != 0) THEN( CONCAT(YEAR(CURDATE()) - YEAR(dob), ' Year ', MONTH(CURDATE()) - MONTH(dob) ,' Month ', DAY(CURDATE()) - DAY(dob) ,' Day ') ) END ) as "Age" from Patient_Details;