Sql вычислить возраст по дате рождения

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

что я использую (Today-Dob)/30/12 , но это не точно, так как некоторые месяцы имеют 31 день.

Мне нужно получить правильный возраст с максимальной точностью. Как я могу это сделать?

9 ответов

для бизнес-логики я обычно нахожу десятичное число (в годах) полезным:

Это легко и прямо к делу.

и альтернатива без использования арифметики и чисел (хотя в этом нет ничего плохого):

или как насчет этого?

Это кажется значительно проще, чем то, что кто-либо еще предложил

Более универсальный вариант SQL запроса из официальной документации:

Смысл следующий — первым шагом вычитаем из текущего года, год рождения, вторым шагом вычитаем единичку если дня рождения в этом году ещё не было.

birthday это поле с датой в любом валидном формате (не timestamp), например 1989-07-22 или даже 1989-07-22T00:00:00 .

Комментарии

Школьные годы чудесные. 🙂

SELECT TIMESTAMPDIFF(YEAR,’1976-10-18′,curdate()) old_player

Ygor, ваш код даёт неверный возраст. Вы, по всей видимости, просто вычитаете из текущего года год рождения, не учитывая месяцы и дни. Проверьте.

SELECT TIMESTAMPDIFF(YEAR,’1980-10-10′,curdate()) old_player

Этот запрос неверный!

Подставьте в текущую дату 2000-01-01 в curdate(), и что должно показать?
Правильно 20 — потому что машина просто высчитывает разность между 2000 и 1980, отбрасывая месяца и дни, а по факту 19 полных лет, так как день рождение будет в октябре, и до него еще 10 месяцев и 9 дней.

В MySQL можно определить возраст пользователя через SQL-запрос, если известна его дата рождения.

Функция TIMESTAMPDIFF возвращает количество дней, месяцев или лет (в зависимости от того, что указано) между двумя датами.

В примере выше указан параметр YEAR , в результате чего функция возвращает количество лет между двумя датами.

Оцените статью
Добавить комментарий

Adblock
detector