我对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日,则不会返回表中的相应数据。
答案 0 :(得分:1)
这听起来像你想要的
SELECT *
FROM table
WHERE date1 >= add_months( date2, -24 )
AND date1 <= add_months( date2, 24 )
您的示例数据不清楚您是否要包含提前24个月或更晚的日期 - 您显然可以将<=
和>=
调整为{{ 1}}和<
如果你想省略相隔24小时的日期。
Oracle >
列始终包含一天和一个时间组件。我发布的查询将比较日期,包括任何时间。如果要将所有时间组件设置为午夜,可以使用DATE
功能(即trunc
和trunc(date1)
)。但是,如果您在谓词中trunc(date2)
,则无法在查询中使用trunc(date1)
上的索引。但是,您可以在date1
上创建基于函数的索引。
答案 1 :(得分:0)
add_months方法的替代方法:
select *
from table
where abs(months_between(date1, date2)) <= 24