Oracle calcul de L'Âge à partir de la date de naissance et Aujourd'hui
je veux calculer l'âge courant à partir de la Date de naissance dans ma fonction Oracle.
ce que j'utilise est (Today-Dob)/30/12
, mais ce n'est pas exact que certains mois ont 31 jours.
je dois obtenir l'âge correct avec la précision maximale. Comment puis-je le faire?
17
demandé sur
fthiella
2010-06-10 18:39:27
9 réponses
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>
36
répondu
N. Gasparotto
2010-06-10 14:51:50
Pour la logique métier j'ai l'habitude de trouver un nombre décimal (en années) est utile:
select months_between(TRUNC(sysdate),
to_date('15-Dec-2000','DD-MON-YYYY')
)/12
as age from dual;
AGE
----------
9.48924731
13
répondu
Jeffrey Kemp
2010-06-11 02:07:03
SELECT
TRUNC((SYSDATE - TO_DATE(DOB, 'YYYY-MM-DD'))/ 365.25) AS AGE_TODAY FROM DUAL;
c'est facile et direct.
3
répondu
HushMamba
2017-03-09 17:50:07
et une alternative sans utiliser d'arithmétique et de nombres (bien qu'il n'y ait rien de mal à cela):
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.
2
répondu
Rob van Wijk
2012-08-24 07:33:53
Ou comment à ce sujet?
with some_birthdays as
(
select date '1968-06-09' d from dual union all
select date '1970-06-10' from dual union all
select date '1972-06-11' from dual union all
select date '1974-12-11' from dual union all
select date '1976-09-17' from dual
)
select trunc(sysdate) today
, d birth_date
, floor(months_between(trunc(sysdate),d)/12) age
from some_birthdays;
2
répondu
ealrr01
2013-01-11 12:49:11
cela semble beaucoup plus facile que ce que quelqu'un d'autre a suggéré
select sysdate-to_date('30-jul-1977') from dual;
2
répondu
user2406874
2013-05-21 19:13:52
Âge (années complètes) de la personne:
SELECT
TRUNC(months_between(sysdate, per.DATE_OF_BIRTH) / 12) AS "Age"
FROM PD_PERSONS per
0
répondu
provisota
2017-08-29 10:40:44
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
répondu
Ramesh Abburi
2017-11-20 08:09:15