Разница дат в MySQL для расчета возраста
Вопрос
У меня проблема относительно datediff
Функция MYSQL, я могу ее использовать, и это просто.Но я не понимаю, как его использовать для сбора различий в поле таблицы.Например.
у меня есть колонка dob
и я хочу написать запрос, который будет делать что-то вроде
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
Я имею в виду, что мне нужна разница между текущей датой и временем поля таблицы. dob
, каждый результат запроса представляет собой разницу в возрасте пользователя.
Решение
Вы имеете в виду вот так?
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable
(Источник)
Другие советы
Ты мог бы сделать это
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS
возрастFROM your_table
Работает всегда.
Если вы хотите для каждого пользователя отображать возраст в годах, выполните
select name,extract(year from (from_days(dateDiff(current_timestamp,dob))))
from sometable;
Если я правильно понимаю ваши комментарии к предыдущим ответам, столбец даты рождения на самом деле не является DATE
значение, а не строку в формате m/d/y.я сильно рекомендую вам изменить это;это замедляет любые вычисления дат, которые вы хотите выполнить, и вы рискуете ввести неверные значения даты в столбец.
Я думаю, это то, что вам нужно.Он использует STR_TO_DATE()
функция и алгоритм вычисления возраста из документации MySQL:
SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y'))
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age
FROM sometable;
Я думаю, это должно помочь
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
Примечание:Укажите дату рождения в правильном формате, например. YYYY-MM-DD'=> '1991-11-11
Попробуй это
SELECT DATEDIFF(CURDATE(), '2014-02-14');
select truncate(datediff(curdate(),dob)/365.25,0) from table;