Разница дат в MySQL для расчета возраста

У меня проблема с функцией datediff MYSQL, я могу ее использовать, и она проста. Но я не понимаю, как его использовать для сбора различий в поле таблицы. Например.

У меня есть столбец dob, и я хочу написать запрос, который будет делать что-то вроде

select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column

Я имею в виду, что мне нужна разница с текущей датой и временем в поле таблицы dob, каждый результат запроса - это разница, возраст пользователя.


person chsab420    schedule 05.09.2009    source источник
comment
Разве разница между текущим временем и датой рождения всегда не будет возрастом этого человека?   -  person Rex M    schedule 05.09.2009


Ответы (6)


Вы имеете в виду вот так?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable

(Источник )

person Nadia Alramli    schedule 05.09.2009
comment
Возвращает Null, моя сохраненная дата - м/д/год, для записи, над которой я работаю, стоит 01.01.1969 док. но он возвращает ноль :( все время - person chsab420; 05.09.2009
comment
Использование TIMESTAMPDIFF — гораздо лучший вариант. - person Eric; 13.04.2017
comment
Отсутствует, если сегодня день рождения - person MMeah; 18.05.2018

Вы могли бы сделать это

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) ASвозрастFROM your_table

Работает каждый раз.

person Sunday Ikpe    schedule 11.03.2014

Если вы хотите, чтобы для каждого пользователя отображался возраст в годах, выполните

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
       from sometable;
person Martin v. Löwis    schedule 05.09.2009
comment
Возвращает Null, моя сохраненная дата - м/д/год, для записи, над которой я работаю, стоит 01.01.1969 док. но он возвращает ноль :( все время - person chsab420; 05.09.2009
comment
Итак, каков тип данных в вашем поле dob? Вы действительно должны использовать тип даты/времени, а не обычный текст. - person Martin v. Löwis; 06.09.2009

Если я понимаю ваши комментарии к предыдущим ответам, столбец даты рождения на самом деле представляет собой не значение DATE, а строку в формате м/д/г. Я настоятельно рекомендую вам изменить это; это замедляет любые вычисления даты, которые вы хотите сделать, и вы рискуете ввести недопустимые значения даты в столбец.

Я думаю, это то, что вам нужно. Он использует функцию 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;
person Ken Keenan    schedule 05.09.2009

я думаю это должно помочь

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

Примечание. Укажите дату рождения в правильном формате, например. YYYY-MM-DD'=> '1991-11-11

person VISHNU    schedule 02.09.2013

Попробуй это

SELECT DATEDIFF(CURDATE(), '2014-02-14');
person Akhileshwar Reddy    schedule 15.08.2015