Определение возраста по дате рождения в MySQL
Определить возраст любого из пользователей в базе данных MySQL ее же средствами можно достаточно просто , если вычислить разницу между текущим годом и годом его рождения, а из результата вычесть единицу, если текущий день находится к началу календаря ближе, нежели день рождения юзера.
Приведенный ниже запрос выводит имя, дату рождения каждого пользователя и его возраст.
SELECT `name`, `birth`, (YEAR(CURRENT_DATE)-YEAR(`birth`))-(RIGHT(CURRENT_DATE,5)<RIGHT(`birth`,5) ) AS `age` FROM `users` ORDER BY `name`;
В этом запросе функция YEAR()
выделяет из даты год, а RIGHT()
— пять крайних справа символов, представляющих календарный день (MM-DD
). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день (CURRENT_DATE
) находится к началу календаря ближе, нежели день рождения пользователя.
Все выражение смотрится несколько неуклюже, поэтому вместо него в заголовке соответствующего столбца результатов выводится псевдоним (age
— «возраст»).
Изначально таблица users
в MySQL имеет такой вид:
id | name | birth |
---|---|---|
1 | Кобзарев Михаил Николаевич | 1986-01-04 |
2 | Иванов Иван Иванович | 1955-12-12 |
… | ||
n | Пупкин Василий Петрович | 1856-03-29 |
Спасибо очень выручили!!!
Всегда пожалуйста!
А как сделать несовершеннолетних пользователей неактивными? В таблицу users предварительно добавил поле is_active по умолчанию =1(или true)/
Добавить в запрос условие по
is_active
Спасибо за ваш труд!
Подскажите пож., а возможно ли получить возраст прямо внутри создания переменной? Я предполагаю что это облегчит код, но реализовать пока не получается.
О какой переменной идет речь?