2013-10-24 165 views
0

可能是这个问题是愚蠢的一个或重复一次,但我没有得到这个日期差异

我有表,该表具有日期格式塔(eff_date)精确answe,我想要的数据,其中SYSDATE安达之间的差异eff_date超过两年,等于两年

我使用此查询我知道它的语法错误

select * 
from Customer 
where (select floor(months_between(sysdate,eff_date)/12) 
     from Customer t) >= 2 

回答

1

如果你想使用months_between

SELECT * 
    FROM customer 
WHERE months_between(sysdate, eff_date) >= 24 

如果在eff_date指数,不过,你可能想

SELECT * 
    FROM customer 
WHERE eff_date <= sysdate - interval '2' year 
+0

好感谢您的答复。你指的是什么意思..?我第一个你建议和第二个是给不同的结果我认为第一个是正确的答案..我试过一个答案,正确的,如果我错了..'select * from(select t。*,floor(months_between(sysdate, eff_date)/ 12)as date_diff from Customer t)where date_diff> = 2' – aravind

+0

@aravind - 对不起,我忘了将'> ='操作符倒过来。更正了第二个答案。索引是数据库中的一种结构,其目的是通过让查询在'O(log N)'时间内搜索特定行而不是读取'O(n)'表中的每一行来提高查询的效率。如果'eff_date'上有索引,第一个查询将无法使用它 - 它需要扫描整个表。第二个查询可能能够使用索引,具体取决于您的数据分布。 –

+0

谢谢第一个工作正常..如果任何一年是闰年,还有一个问题会有问题吗? – aravind