2015-04-04 20 views
1
select 
    // 
from 
    // 
where 
    //this is the place i need help with 

我有一個表persondob date
我希望能夠選擇1歲或以上的人。檢查一個人的年齡,該人有出生日期作爲日期存儲

一些模擬日期:

name  dob 
person 1 13-DEC-2014 
person 2 24-JAN-2011 
person 3 05-MAY-2013 
person 4 17-APR-2014 
person 5 21-DEC-2013 
person 6 11-NOV-2014 

在這種情況下,我會想到的名字 '人2', '3人' 和 '人5' 在輸出中列出。我知道如何在我的場景中執行select和from語句,而不是在哪裏。任何幫助將不勝感激。

回答

1

我會用ADD_MONTHS()

SELECT * FROM person 
WHERE dob <= TRUNC(ADD_MONTHS(SYSDATE, -12)); 

在上面實際上,我加入-12個月(或1年 - 相當於減去12個月)來的SYSDATE值。

+0

幾個這些答案,正是我所需要的,你的完美,謝謝。 – 2015-04-04 15:32:13

0

計算閾值,並比較DOB到:

where dob <= add_months(sysdate, -12)) 

使用的閾值的常量表達式也意味着,如果在DOB存在索引那麼這將是對使用的候選者。即使索引不存在,它仍然比從dob(的每個值)開始計算一個日期並將其與今天進行比較要高效得多。

+0

它說缺少右括號,其中 '1' 是從 – 2015-04-04 14:57:34

+0

人員P 其中選擇 p.name p.dob <= subdate(current_date,interval 1 year) - 這是查詢即時獲取錯誤。 – 2015-04-04 15:02:58

+1

'SUBDATE()'是一個MySQL函數,不是Oracle。 – 2015-04-04 15:15:28

2
select * 
    from person 
where dob <= add_months(trunc(sysdate), -12) 

將返回出生日期比當前日期早12個月以上的所有人。 sysdate返回當前日期和時間。 trunc刪除時間組件(將其設置爲午夜)。然後add_months減去12個月。

-2

TO_CHAR(SYSDATE, 'YYYY') - TO_CHAR(DOB, 'YYYY')> 1

+0

這會返回早年出生的人,而不是年齡更大或更大的人。 – 2015-04-05 01:02:55

+0

你必須使用> =而不是> – 2015-04-05 06:01:48

+0

它仍然是不正確的...例如,它會返回2014年出生的人,即使他們還沒有1歲。 – 2015-04-05 10:52:21