我正在使用下面的語句在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