2009-09-05 1 views
8

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

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

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

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

+0

не будет «отличия от текущей даты-времени и DOB» всегда возраст этого человека? –

ответ

19

Вы имеете в виду вот это?

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

(Source)

+0

Возвращает Null Моя дата хранится m/d/year, для записи, которую я работаю, есть 1/1/1969 dob. но он возвращает null :(все время – chsab420

+0

Использование TIMESTAMPDIFF - это намного лучший вариант – Eric

1

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

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
     from sometable; 
+0

Возвращает Null Моя дата хранится m/d/year, для записи, которую я работаю, есть 1/1/1969 dob, но она возвращает null: (все время – chsab420

+0

Итак, каков тип данных на вашем поле dob? Вы действительно должны использовать тип даты/времени, а не обычный текст. –

1

Если я понимаю, ваши комментарии по предыдущим ответам, дата-о столбец -birth не является значением DATE, а строкой в ​​формате m/d/y. I сильно рекомендовать вам изменить это; он замедляет любые расчеты по дате, которые вы хотите сделать, и вы рискуете ввести недопустимые значения даты в столбцы.

Я думаю, что это то, что вам нужно. Он использует 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; 
0

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

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

Примечание: Дайте D.O.B в правильном формате, например, YYYY-MM-DD'=> '1991-11-11

8

Вы можете сделать это

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

Works каждый раз.

0

Попробуйте

SELECT DATEDIFF(CURDATE(), '2014-02-14'); 
0
select truncate(datediff(curdate(),dob)/365.25,0) from table; 

 Смежные вопросы

  • Нет связанных вопросов^_^