Oracle SQL - 返回date1在date2的24个月内的记录

时间:2013-10-31 20:57:47

标签: sql oracle

我对SQL很新,但我被要求写一些我不太了解的东西。我希望选择日期在另一个日期的24个月内的记录。类似的东西: -

select * 
  from table 
  where (date1 within 24 months of date2)

例如,如果date1是01/01/2010,其中date2具有以下值,则表中将返回相应的记录: -

05/09/2009
01/02/2008
06/03/2011

但是,如果date2是,例如,2013年12月25日,则不会返回表中的相应数据。

2 个答案:

答案 0 :(得分:1)

这听起来像你想要的

SELECT *
  FROM table
 WHERE date1 >= add_months( date2, -24 )
   AND date1 <= add_months( date2, 24 )

您的示例数据不清楚您是否要包含提前24个月或更晚的日期 - 您显然可以将<=>=调整为{{ 1}}和<如果你想省略相隔24小时的日期。

Oracle >列始终包含一天和一个时间组件。我发布的查询将比较日期,包括任何时间。如果要将所有时间组件设置为午夜,可以使用DATE功能(即trunctrunc(date1))。但是,如果您在谓词中trunc(date2),则无法在查询中使用trunc(date1)上的索引。但是,您可以在date1上创建基于函数的索引。

答案 1 :(得分:0)

add_months方法的替代方法:

select * 
from table 
where abs(months_between(date1, date2)) <= 24