Как получить возраст, используя столбец даты рождения по запросу MySQL?

#php #mysql #zend-framework #date

#php #mysql #zend-framework #Дата

Вопрос:

У меня есть столбец даты рождения в таблице базы данных MySQL для хранения даты рождения пользователя. Теперь у меня есть форма в html / php с двумя полями (1. Возраст от 2. Возраст до).

Если пользователь хочет получить всех пользователей, чей возраст составляет от 10 до 20 лет, возможно ли это сделать с помощью запроса MySQL, используя столбец даты рождения.

Спасибо

Комментарии:

1. Какой тип данных в столбце даты рождения?

Ответ №1:

Ваш запрос будет выглядеть примерно так:

 SELECT * FROM your_table WHERE YEAR(CURDATE())-YEAR(BirthDate) BETWEEN 10 AND 20;
  

Комментарии:

1. Это выглядит просто и идеально.

2. @soulkphp Это не работает для людей, чья дата рождения после текущей даты. Например, если кто-то родился 1986-11-30, ему было бы 25 лет, а не 26, как вычисляет ваш запрос.

3. @RomainGuidoux Я сделал дикое предположение, что люди не могут родиться в будущем 🙂

4. Старый вопрос, я знаю, но я думаю, что @RomainGuidoux имел в виду, что если вы специально искали кого-то, кому было 9 лет, это было бы (в настоящее время) 2015-2006. Но это также даст вам кого-то, кому 8 лет, если они родились позже в этом году. Итак, если это апрель, а они родились в сентябре, они все равно будут отображаться, даже если им всего 8 лет.

5. Это не работает, если мой тип даты varchar «1 марта 1990»??

Ответ №2:

Вы можете получить вот так

 SELECT column1, column2, 
   DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(dob)), '%Y')   0 as age     
WHERE age >10 AND age <20 ; 
  

Комментарии:

1. Это должен быть выбранный ответ. Это позволяет получить возраст с точностью до дня, сопоставленный только с годом.

Ответ №3:

 select * from table where
(year(curdate())-year(dob))-(right(curdate(),5)< right(dob,5) )
between 10 and 20
  

Ответ №4:

Другое решение, которое проверяет год и месяц:

 SELECT * FROM yourTable WHERE FLOOR(DATEDIFF(curdate(), birthdate) / 365.25) BETWEEN 10 AND 20
  

Ответ №5:

Его также можно получить с помощью подзапроса:

 select *
    from (select *, TIMESTAMPDIFF(YEAR, birthday, NOW()) as age from table_name) as sub_query
    where age between 10 AND 20