Oracle Age calculation from Date of birth and Today

前端 未结 13 1409
Happy的楠姐
Happy的楠姐 2020-11-27 15:31

I want to calculate the current Age from Date of Birth in my Oracle function.

What I am using is (Today-Dob)/30/12, but this is not accurate as some mon

相关标签:
13条回答
  • 2020-11-27 15:56

    This seems considerably easier than what anyone else has suggested

    select sysdate-to_date('30-jul-1977') from dual; 
    
    0 讨论(0)
  • 2020-11-27 15:58

    select (SYSDATE-DOB)/365 "Age" from dual

    0 讨论(0)
  • 2020-11-27 16:01
    select (extract(year from current_date)-extract(year from Date_of_birth)) as Age from table_name;`
    
    age=current_year - birth_year;
    

    extract(year/month/date from date) //oracle function for extracting values from date

    0 讨论(0)
  • 2020-11-27 16:05

    You can try

    SELECT ROUND((SYSDATE - TO_DATE('12-MAY-16'))/365.25, 5) AS AGE from DUAL;
    

    You can configure ROUND to show as many decimal places as you wish.

    Placing the date in decimal format like aforementioned helps with calculations of age groups, etc.

    This is just a contrived example. In real world scenarios, you wouldn't be converting strings to date using TO_DATE.

    However, if you have date of birth in date format, you can subtract two dates safely.

    0 讨论(0)
  • 2020-11-27 16:11
    SQL>select to_char(to_date('19-11-2017','dd-mm-yyyy'),'yyyy') -  to_char(to_date('10-07-1986','dd-mm-yyyy'),'yyyy') year,
    to_char(to_date('19-11-2017','dd-mm-yyyy'),'mm') -  to_char(to_date('10-07-1986','dd-mm-yyyy'),'mm') month,
    to_char(to_date('19-11-2017','dd-mm-yyyy'),'dd') -  to_char(to_date('10-07-1986','dd-mm-yyyy'),'dd') day from dual;
    
          YEAR      MONTH        DAY
    ---------- ---------- ----------
            31          4          9
    
    0 讨论(0)
  • 2020-11-27 16:12

    And an alternative without using any arithmetic and numbers (although there is nothing wrong with that):

    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.
    
    0 讨论(0)
提交回复
热议问题