New Firebird user here w/a background in PostgreSQL, somewhat limited to GIS/spatial DB admin. Took a stab at this one (feedback welcome!) to get the feel for date handling and it took more tweaking & testing than expected. May not be the most efficient/elegant solution but, assuming the existence of column **join_date** in table **employees**, something like this will work: SELECT Y ||' Years, '|| M ||' Months, and '|| D ||' Days' FROM ( SELECT CASE WHEN datediff(year, join_date, current_date) <> datediff(day, join_date, current_date)/365 THEN datediff(year, join_date, current_date)-1 ELSE datediff(year, join_date, current_date) END as Y, CASE WHEN datediff(year, join_date, current_date) <> datediff(day, join_date, current_date)/365 AND datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)<0 THEN datediff(month, dateadd(year, datediff(year, join_date, current_date)-1, join_date), current_date)-1 WHEN datediff(year, join_date, current_date) <> datediff(day, join_date, current_date)/365 AND datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)>=0 THEN datediff(month, dateadd(year, datediff(year, join_date, current_date)-1, join_date), current_date) WHEN datediff(year, join_date, current_date) = datediff(day, join_date, current_date)/365 AND datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)<0 THEN datediff(month, dateadd(year, datediff(year, join_date, current_date), join_date), current_date)-1 ELSE datediff(month, dateadd(year, datediff(year, join_date, current_date), join_date), current_date) END as M, CASE WHEN datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)<0 THEN datediff(day, dateadd(month, datediff(month, join_date, current_date)-1, join_date), current_date) ELSE datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date) END as D FROM employees ) The subquery turned conditional on me when it became clear that: a) calculations on year & month don't consider the date as a whole; and b) date subtraction will happily return negative values regardless of the order of events. Year/Month/Day Example: datediff() returns a value of 1 when retrieving the number of days, months, or years between 31.12.2015 and 1.1.2016. Negative Value Example: about 69% of my test-date values are less than zero when I calculate the number of days *less the number of days contained by whole months* using: SELECT datediff(day, dateadd(month, datediff(month, date_column, current_date), date_column), current_date) as D FROM date_table We can streamline the subquery if substituting 365 days for one year is acceptable. The trick works with my test data but may trigger pitfalls with a broader range of dates. The simplified query looks like: SELECT Y ||' Years, '|| M ||' Months, and '|| D ||' Days' FROM ( SELECT datediff(day, join_date, current_date)/365 as Y, CASE WHEN datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)<0 THEN datediff(month, dateadd(year, datediff(day, join_date, current_date)/365, join_date), current_date)-1 ELSE datediff(month, dateadd(year, datediff(day, join_date, current_date)/365, join_date), current_date) END as M, CASE WHEN datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date)<0 THEN datediff(day, dateadd(month, datediff(month, join_date, current_date)-1, join_date), current_date) ELSE datediff(day, dateadd(month, datediff(month, join_date, current_date), join_date), current_date) END as D FROM employees ) Holler if I goofed it or over-complicated the logic. Hope it's helpful! --Rob