关于SQL查询的问题

时间:2010-04-11 11:38:45

标签: sql oracle

我使用以下语句在Oracle SQL中生成一个人的年龄,我的问题如下。

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

到目前为止,这个陈述是正确的,我需要一个可以计算数月甚至数天才能达到年龄的陈述。

3 个答案:

答案 0 :(得分:3)

谷歌搜索'oracle从dob获得年龄'返回几个答案

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

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

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 :(得分:1)

您可以使用EXTRACT function之类的

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

用你需要的任何东西代替YEAR。

/编辑我想我误解了。如果您需要更高的精度,间隔可以提供帮助(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 ...

返回天数。

答案 2 :(得分:0)

Oracle直接在DATE列上支持算术运算:

SELECT SYSDATE - BIRTH_DATE FROM NAME WHERE NAME_ID =NAME_ID

此处的结果将是一个表示天数差异的数字。

如果你想在几个月内使用它,请使用:

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

如果您想要多年,请将MONTHS_BETWEEN除以12。