@marsel81

Каким образом из даты рождения получить возраст?

В Oracle DATEDIFF не работает и тогда как вывести возраст по дате рождения, учитывая, что дня рождения в этом году еще не было. И есть ли возможность обойтись без SYSDATE, т.е не узнавать текущую дату у системы?
  • Вопрос задан
  • 3296 просмотров
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
На самом деле, DATEDIFF вам совершенно ни к чему. Нужно всего лишь вычесть год рождения из текущего, а затем уменьшить результат на единицу, если месяц рождения больше текущего или месяцы равны, а дата больше.
Можно свести это к одной формуле год * 10000 + месяц * 100 + день.
Нацело делим разницу на 10000 - получаем возраст.
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Нужна ещё дата смерти.
Для MS SQL.
CAST( DATEDIFF( Year, BirthDay, ISNULL( DeathDay, GETDATE())) 
 + ( SIGN ( DATEDIFF ( DAY, BirthDay, DATEADD ( YEAR, YEAR( BirthDay ) 
 - YEAR( ISNULL( DeathDay, GETDATE()) ), 
 ISNULL( DeathDay, GETDATE())))) - 1 ) / 2 AS VARCHAR)

Это "магическая" формула, учитывающая високосный год.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
В mssql я приводил дату др к текущему году, а там уже просто если было др(приведенная дата меньше текущей) значит столько лет, если небыло, значит на один меньше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы