Вычисление Возраста Oracle от Даты рождения и Сегодня

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

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

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

21
задан fthiella 2 May 2016 в 15:05
поделиться

3 ответа

SQL> select trunc(months_between(sysdate,dob)/12) year,
  2         trunc(mod(months_between(sysdate,dob),12)) month,
  3         trunc(sysdate-add_months(dob,trunc(months_between(sysdate,dob)/12)*12+trunc(mod(months_between(sysdate,dob),12)))) day
  4  from (Select to_date('15122000','DDMMYYYY') dob from dual);

      YEAR      MONTH        DAY
---------- ---------- ----------
         9          5         26

SQL>
44
ответ дан 29 November 2019 в 06:20
поделиться

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

select months_between(TRUNC(sysdate),
                      to_date('15-Dec-2000','DD-MON-YYYY')
                     )/12
as age from dual;

       AGE
----------
9.48924731
14
ответ дан 29 November 2019 в 06:20
поделиться

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

SQL> with some_birthdays as
  2  ( select date '1968-06-09' d from dual union all
  3    select date '1970-06-10' from dual union all
  4    select date '1972-06-11' from dual union all
  5    select date '1974-12-11' from dual union all
  6    select date '1976-09-17' from dual
  7  )
  8  select trunc(sysdate) today
  9       , d birth_date
 10       , extract(year from numtoyminterval(months_between(trunc(sysdate),d),'month')) age
 11    from some_birthdays
 12  /

TODAY               BIRTH_DATE                 AGE
------------------- ------------------- ----------
10-06-2010 00:00:00 09-06-1968 00:00:00         42
10-06-2010 00:00:00 10-06-1970 00:00:00         40
10-06-2010 00:00:00 11-06-1972 00:00:00         37
10-06-2010 00:00:00 11-12-1974 00:00:00         35
10-06-2010 00:00:00 17-09-1976 00:00:00         33

5 rows selected.
3
ответ дан 29 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

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