1

我对 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 是例如 25/12/2013,则不会返回表中的相应数据。

4

2 回答 2

1

听起来你想要

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

您的示例数据不清楚您是否要包含正好早于或晚于 24 个月的日期 - 您显然可以调整<=and>=<>如果您想省略正好相隔 24 小时的日期。

OracleDATE列总是同时具有一天和时间组件。我发布的查询将比较日期,包括存在的任何时间。如果您想将所有时间组件设置为午夜,您可以使用该trunc功能(即trunc(date1)trunc(date2))。但是,如果您trunc(date1)在谓词中,您将无法date1在查询中使用索引。但是,您可以创建一个基于函数的索引trunc(date1)

于 2013-10-31T21:04:19.313 回答
0

add_months 方法的替代方法:

select * 
from table 
where abs(months_between(date1, date2)) <= 24
于 2013-11-04T06:23:19.400 回答