Определение возраста по дате рождения в MySQL
Определить возраст любого из пользователей в базе данных MySQL ее же средствами можно достаточно просто , если вычислить разницу между текущим годом и годом его рождения, а из результата вычесть единицу, если текущий день находится к началу календаря ближе, нежели день рождения юзера.
Приведенный ниже запрос выводит имя, дату рождения каждого пользователя и его возраст.
В этом запросе функция YEAR() выделяет из даты год, а RIGHT() — пять крайних справа символов, представляющих календарный день ( MM-DD ). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день ( CURRENT_DATE ) находится к началу календаря ближе, нежели день рождения пользователя.
Все выражение смотрится несколько неуклюже, поэтому вместо него в заголовке соответствующего столбца результатов выводится псевдоним ( age — «возраст»).
Sql как вычислить возраст по дате рождения
В MySQL имеется несколько функций, реализующих арифметические операции над датами. Эти функции позволяют, например, вычислять возраст или получать части даты.
Определить возраст любого из животных в базе можно, если вычислить разницу между текущим годом и годом его рождения, а из результата вычесть единицу, если текущий день находится к началу календаря ближе, нежели день рождения животного. Приведенный ниже запрос выводит дату рождения каждого животного, его возраст и текущую дату.
В этом примере функция YEAR() выделяет из даты год, а RIGHT() — пять крайних справа символов, представляющих календарный день (MM-DD). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день ( CURRENT_DATE ) находится к началу календаря ближе, нежели день рождения животного. Все выражение смотрится несколько неуклюже, поэтому вместо него в заголовке соответствующего столбца результатов выводится псевдоним ( age — «возраст»).
Запрос неплохо работает, но разобраться в результатах было бы проще, если бы строки располагались в определенном порядке. Этого можно достичь, добавив в запрос выражение ORDER BY name и отсортировав таким образом результаты по имени:
Отсортировать результаты по возрасту также можно при помощи выражения ORDER BY :
подобный же запрос поможет определить возраст, которого достигли умершие животные на момент смерти. Выделить умерших животных можно, проверив значение поля death на предмет равенства NULL . Затем для записей, значения поля death которых не равно NULL , можно вычислить разницу между датами смерти и рождения:
В этом запросе используется выражение death IS NOT NULL , а не death <> NULL , так как NULL — особое значение (более подробные пояснения приведены в разделе see section 3.3.4.6 Работа с значениями NULL).
А как поступать, если потребуется определить, дни рождения каких животных наступят в следующем месяце? Для таких расчетов день и год значения не имеют; из столбца, содержащего дату рождения, нас интересует только месяц. В MySQL предусмотрено несколько функций для получения частей дат — YEAR() , MONTH() , и DAYOFMONTH() . В данном случае нам подойдет функция MONTH() . Увидеть работу этой функции можно с помощью простого запроса, выводящего дату рождения birth и MONTH(birth) :
Найти животных, дни рождения которых наступят в следующем месяце, тоже несложно. Предположим, что сейчас на дворе апрель. Тогда номер текущего месяца — 4, а искать надо животных, родившихся в мае (5-м месяце), таким образом:
Конечно, в декабре возникают некоторые осложнения. Если просто добавить единицу к номеру месяца (12) и поискать животных, родившихся в тринадцатом месяце, найти что-нибудь вряд ли удастся. Вместо этого нужно искать животных, родившихся в январе (1-м месяце).
Можно даже написать небольшой запрос, который будет работать вне зависимости от того, какой нынче месяц. Функция DATE_ADD() позволяет прибавить к дате некоторый интервал времени. Если добавить к значению, возвращаемому функцией NOW() , месяц, а затем извлечь из получившейся даты номер месяца при помощи функции MONTH() , мы получим именно тот месяц, который нам нужен:
Ту же задачу можно решить и другим методом — для этого нужно прибавить единицу к номеру месяца, следующего за текущим (воспользовавшись функцией расчета по модулю (MOD) для перехода к 0, если номер текущего месяца равен 12):
Функция MONTH возвращает число от 1 до 12, а выражение MOD(число,12) — число от 0 до 11. Поэтому операцию сложения нужно проводить после MOD() , иначе результат перепрыгнет с ноября (11) сразу на январь (1).
Вычисляем возраст согласно дате в MySQL
Если перед вами встанет задача вычисления возраста пользователя по дате его рождения непосредственно в MySQL, то в данной статье вы найдёте готовое решение.
В недрах сети было найдено решение. Мы его немного подлатали, убрали избыточные конвертации и обернули в функцию, которую можно использовать в дальнейшем.
На первый взгляд немного мудрёное решение, однако если его опробовать, то результат будет чёткий и точный. Принцип таков: вычитаем текущий год из года рождения пользователя; если текущий день и месяц меньше даты рождения пользователя отнимаем ещё год.
Использовать данную функцию можно следующим образом.
Вот и всё! Данные типа DATE превращаются в возраст.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://codingexplained.com/databases/mysql/calculate-age-from-date-of-birth-in-mysql
Перевел: Станислав Протасевич
Урок создан: 30 Апреля 2015
Просмотров: 11759
Правила перепечатки
5 последних уроков рубрики «Разное»
Как выбрать хороший хостинг для своего сайта?
Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.
Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов
Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.
Разработка веб-сайтов с помощью онлайн платформы Wrike
Создание вебсайта — процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.
20 ресурсов для прототипирования
Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.
Топ 10 бесплатных хостингов
Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.
Calculate the Age in Years in PostgreSQL
Postgres has the age() function that returns the age in years, months, and days based on two dates.
This works fine unless you only want to return the age in years.
For example, you simply want to return a person’s age based on their birthday. You want something like 32 instead of 32 years 4 mons 67 days, which is what age() is likely to return.
Fortunately there’s an easy way to do this in PostgreSQL.
If you only want the age in years, you can use either extract() or date_part() to get the year from the age() function’s return value.
Here’s an example that uses the date_part() function:
That’s how it appears when I run it in Azure Data Studio.
When I run it in psql, I get this:
Both extract() and date_part() return their results using the double precision data type.
You can convert this to an integer (or other data type) if required, by appending it with ::int .