检查一个人的年龄,该人将出生日期存储为日期

时间:2015-04-04 14:38:21

标签: sql oracle date

select
    //
from
    //
where
    //this is the place i need help with

我有一个表person,其中包含dob 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语句,而不是在哪里。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

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

将返回出生日期超过当前日期前12个月的所有人。 sysdate返回当前日期和时间。 trunc删除时间组件(将其设置为午夜)。然后add_months减去12个月。

答案 1 :(得分:1)

我会使用ADD_MONTHS()

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

在上面我实际上将-12个月(或1年 - 相当于减去12个月)加到SYSDATE的值。

答案 2 :(得分:0)

计算阈值并将dob与之比较:

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

对阈值使用常量表达式也意味着如果dob上存在索引,那么它将成为使用的候选者。即使一个索引不存在,它仍然比从(dob的每个值)起一个日期并将其与今天进行比较的效率要高得多。

答案 3 :(得分:-2)

to_char(sysdate,'YYYY') - to_char(dob,'YYYY')&gt; 1