2010-04-11 5 views
2

J'utilise l'instruction ci-dessous pour générer l'âge d'une personne dans Oracle SQL et ma question est ci-dessous.Question À propos de requête SQL

SELECT TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY'))-TO_NUMBER(TO_CHAR(BIRTH_DATE,'YYYY')) 
FROM NAME WHERE NAME_ID =NAME_ID 

Cette déclaration n'est correcte jusqu'à ce jour que je besoin d'une déclaration qui pourrait compter des mois, voire des jours pour obtenir l'âge.

+0

Il y a une question similaire, mais sur MSSQL. Peut-être que cela peut vous aider à démarrer. http://stackoverflow.com/questions/283764/finding-someones-age-in-sql –

+0

Quelqu'un pourrait m'aider s'il vous plaît à convertir l'instruction ci-dessus liée à Oracle SQL. Je suis un mannequin chez Oracle SQL – Ameer

Répondre

3

recherche sur Google pour 'oracle get age de DOB' retourne plusieurs réponses

select trunc((months_between(sysdate, dob))/12) age 
from name; 

ressemble à une bonne solution (trunc est facultatif) et

select to_number(to_char(sysdate,'YYYY')) - to_number(to_char(bth_date,'YYYY')) + 
     decode(sign(to_number(to_char(sysdate,'MMDD')) - 
        to_number(to_char(bth_date,'MMDD'))),-1,-1,0) age 
from name; 

est également correcte.

1

Vous pouvez utiliser le EXTRACT function comme

SELECT EXTRACT(YEAR FROM(CURRENT_DATE - BIRTH_DATE)) FROM ... 

Remplaçant AN par tout ce que vous avez besoin.

/edit Je pense que j'ai mal lu. Si vous avez besoin de précisions plus élevées, des intervalles peuvent être utiles (http://blagispat.blogspot.com/2007/11/heres-short-article-on-using-intervals.html). (Sry mais les nouveaux utilisateurs peuvent seulement poster un lien hypertexte).

SELECT EXTRACT(YEAR FROM(CURRENT_DATE - BIRTH_DATE) YEAR TO MONTH) FROM ... 

ou

SELECT EXTRACT(DAY FROM(CURRENT_DATE - BIRTH_DATE) DAY TO SECOND) FROM ... 

qui retourne jours.

0

Oracle prend en charge les opérations arithmétiques directement sur DATE colonnes:

SELECT SYSDATE - BIRTH_DATE FROM NAME WHERE NAME_ID =NAME_ID 

Le résultat ici sera un nombre qui exprime la différence en quelques jours.

Si vous voulez en mois, utilisez ceci:

SELECT MONTHS_BETWEEN(SYSDATE, BIRTH_DATE) FROM NAME... 

Si vous voulez en années, diviser par 12. MONTHS_BETWEEN