我使用以下语句在Oracle SQL中生成一个人的年龄,我的问题如下。
SELECT TO_NUMBER(TO_CHAR(CURRENT_DATE,'YYYY'))-TO_NUMBER(TO_CHAR(BIRTH_DATE,'YYYY'))
FROM NAME WHERE NAME_ID =NAME_ID
到目前为止,这个陈述是正确的,我需要一个可以计算数月甚至数天才能达到年龄的陈述。
答案 0 :(得分:3)
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。