#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