1

私は SQL にまったく慣れていませんが、完全に理解していないことを書くように求められました。日付が別の日付から 24 か月以内にあるレコードを選択しようとしています。何かのようなもの :-

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

たとえば、date1 が 2010 年 1 月 1 日で、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 か月前または後の日付を含めたいかどうかについて明確ではあり<=ませ>=ん。<>

OracleDATE列には、常に日と時間の両方のコンポーネントがあります。私が投稿したクエリは、現在の時間を含めて日付を比較します。truncすべての時刻コンポーネントを午前 0 時に設定する場合は、関数 (つまり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 に答える