1. create a testing table:
Code:
CREATE TABLE somedates
( adate DATE NOT NULL PRIMARY KEY
);
2. populate it with a comprehensive set of test dates
3. run this query:
Code:
SELECT adate
, FLOOR(mths/12) AS age_years
, mths - 12*FLOOR(mths/12) AS age_months
FROM ( SELECT adate
, PERIOD_DIFF(
EXTRACT(YEAR_MONTH FROM
DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH))
,190001)
- PERIOD_DIFF(
EXTRACT(YEAR_MONTH FROM
adate)
,190001)
+ CASE WHEN DAY(adate) <= DAY(CURRENT_DATE)
THEN 1 ELSE 0 END
AS mths
FROM somedates ) AS dt
ORDER
BY adate
vwalah!!