Я хочу, чтобы вычислить возраст по дате рождения в моей функции 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 , в результате чего функция возвращает количество лет между двумя датами.