Как точно рассчитать возраст человека на экране выступления

Informix-SE 4.10 с isql 4.10 DD6:

У меня есть столбец DATE, BirthDate, связанный с тегом поля выполнения "dob". Когда пользователи вводят dob, я делаю следующую арифметику дат:

age = (TODAY - dob ) / 365.25

возраст тега поля - это поле DECIMAL типа DISPLAYONLY, с FORMAT="##.##".

Этот метод не дает точных результатов.

Бизнес-правило: Пример. Если человеку, которому не исполнилось 18 лет, не исполнилось 18 лет, мне нужно отобразить 17 лет в теге поля возраста и прервать вставку строки клиента. Человеку должно быть>=18 лет.

В этой версии ifx поддерживаются типы данных DATETIME и INTERVAL, но пользователям удобно вводить даты только в формате MMDDYYYY.

1 ответ

Чтобы определить, произошел ли день рождения в этом году, вы должны быть уверены, что не создали недействительную дату в случае, если dob 29 февраля и TODAY в не високосный год. Поскольку 2000 год является високосным, вы можете избежать проблем, связанных с вычитанием всегда на 2000 год.

MDY(MONTH(dob), DAY(dob), 2000) > MDY(MONTH(TODAY), DAY(TODAY), 2000)

Наконец, вычтите одно из разницы в году, если это так:

age = (YEAR(TODAY) - YEAR(dob) - CASE WHEN MDY(MONTH(dob), DAY(dob), 2000) > MDY(MONTH(TODAY), DAY(TODAY), 2000) THEN 1 ELSE 0 END)::int

Другие вопросы по тегам