2010-04-11 94 views
2

我正在使用下面的语句在Oracle SQL中生成一个人的年龄,我的问题如下。关于SQL查询的问题

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

此声明是正确的,直到目前为止,我需要一个可以计算几个月甚至几天才能得到年龄的声明。

+0

划分MONTHS_BETWEEN也有同样的问题,虽然在MSSQL。也许它可以帮助你开始。 http://stackoverflow.com/questions/283764/finding-someones-age-in-sql – 2010-04-11 11:43:37

+0

有人能帮我把上面的链接语句转换成Oracle SQL。我是Oracle SQL的傀儡 – Ameer 2010-04-11 11:52:53

回答

3

谷歌搜索 '从甲骨文DOB年龄获取' 返回几个答案

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

看起来像一个很好的解决方案(TRUNC是可选的)和

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; 

也是正确的。

1

你可以使用通过任何你需要的EXTRACT function

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

替代的一年。

/编辑我想我误读了。如果你需要更高的精度,也许间隔可以帮助(http://blagispat.blogspot.com/2007/11/heres-short-article-on-using-intervals.html)。 (Sry,但新用户只能发布一个超链接)。

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

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

返回天。

0

甲骨文直接支持上DATE列算术运算:

SELECT SYSDATE - BIRTH_DATE FROM NAME WHERE NAME_ID =NAME_ID 

的结果,这里将是一个数字表达天的差别。

如果你想在几个月,使用此:

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

如果你想在年中,12