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语句,而不是在哪里。任何帮助将不胜感激。
答案 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