Получить возраст на дату визита

В запросе выполняю код

trunc(visit.visit_date) - trunc(patient.birthday) получаю возраст пациента в днях на момент посещения поликлиники. Как преобразовать дни в года? Т.е. нужно получить сколько было полных лет на момент посещения.


Ответы (2 шт):

Автор решения: s.vasilev
trunc (MONTHS_BETWEEN (trunc(visit.visit_date), trunc(patient.birthday)) / 12)
→ Ссылка
Автор решения: Герман Борисов

При помощи DatePart получаем год визита и рождения, и вычисляем разницу.

Она или равна искомой или на 1 больше, если в текущем году ДР ещё не наступил.

Проверяем что ДР ещё не наступил так: месяц рождения больше месяца визита иои месяц совпадает, но день визита меньше дня рождения. Если этот так, то вычитаем единицу.

DatePart (visit.visit_date, DP_YEAR) - DatePart (patient.birthday, DP_YEAR) - CASE WHEN DatePart (visit.visit_date, DP_MONTH) < DatePart (patient.birthday, DP_MONTH) OR DatePart (visit.visit_date, DP_MONTH) = DatePart (patient.birthday, DP_MONTH) DatePart (visit.visit_date, DP_DAY ) < DatePart (patient.birthday, DP_DAY ) THEN 1 ELSE 0 END

→ Ссылка