I am trying to calculate how old is a person in a database.
Let's suppose to have this simple table:
student(id, birth_date);
Where id is the primary key (truly the table is more complex but I have simplified it).
I want to get how much old is a single person:
select id, datediff(curdate(),birth_date) from student
But it returns a result in days, and not in years.I could divide it by 365:
select id, datediff(curdate(),birth_date) / 365 from student
But it returns a floating point value, and I want an integer.
So I could calculate the years:
select id, year(curdate())-year(birth_date) from student
But there is a problem: for instance now is May, if a person war born in June, 1970 he has still 31 years and not 32, but the expression returns 32.
I can't come out of this problem, can someone help me?
In MS SQL Server, the DATEDIFF function is used to get the difference between two dates in terms of years, months, days, hours, minutes etc. SELECT DATEDIFF(day, '2018-03-13', GETDATE()) AS "Difference in days"
Definition and UsageThe DATE_SUB() function subtracts a time/date interval from a date and then returns the date.
For anyone who comes across this:
another way this can be done is:
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS difference FROM student
For differences in months, replace YEAR
with MONTH
, and for days replace YEAR
with DAY
Hope that helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With