我正在使用下面的语句在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
此声明是正确的,直到目前为止,我需要一个可以计算几个月甚至几天才能得到年龄的声明。
我正在使用下面的语句在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
此声明是正确的,直到目前为止,我需要一个可以计算几个月甚至几天才能得到年龄的声明。
谷歌搜索 '从甲骨文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;
也是正确的。
你可以使用通过任何你需要的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 ...
返回天。
甲骨文直接支持上DATE
列算术运算:
SELECT SYSDATE - BIRTH_DATE FROM NAME WHERE NAME_ID =NAME_ID
的结果,这里将是一个数字表达天的差别。
如果你想在几个月,使用此:
SELECT MONTHS_BETWEEN(SYSDATE, BIRTH_DATE) FROM NAME...
如果你想在年中,12
划分
MONTHS_BETWEEN
也有同样的问题,虽然在MSSQL。也许它可以帮助你开始。 http://stackoverflow.com/questions/283764/finding-someones-age-in-sql – 2010-04-11 11:43:37有人能帮我把上面的链接语句转换成Oracle SQL。我是Oracle SQL的傀儡 – Ameer 2010-04-11 11:52:53