2010-04-11 89 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