1

HQLを使用して、2つの日付フィールドが互いに1か月以内にあるレコードを検索しようとしています。

Query query = session.createQuery("from com.ep.cqprojects.db.Projects "
    + "where active_date - kickoff_meeting_date < interval '1' month ");

残念ながら、使用されているデータベースは明らかに間隔を理解していません。

2つの日付フィールド間の間隔を比較するにはどうすればよいですか?

4

2 に答える 2

2

暦月である必要がありますか?その場合、HQLのみの優れたソリューションはありません。あなたが得ることができる最も近いものは次のとおりです:

from com.ep.cqprojects.db.Projects
 where active_date - kickoff_meeting_date < 31
   and month(active_date) - month(kickoff_meeting_date) < 2

month()ANSI SQL関数であるため、データベースエンジンでサポートされることを願っています(ちなみに、それはどのデータベースですか?)2番目の条件は、active_date前月の最終日でありkickoff_meeting_date、月を挟んで翌月の初日である場合を取り除くために必要です。 31日未満の長さ。
必要に応じて、これをさらに拡張して時間を処理できます。ただし、最終的には、おおよその結果を取得し、コードでそれらをさらに再チェック/フィルタリングする方がよい場合があります。

于 2009-07-28T21:17:41.673 に答える
0

残念ながら、JPQLはまだ完全には存在していません。2つの日付フィールドを正確に比較するには、問題のエンティティを日付(DATEまたはTIMESTAMP)Java / JPAオブジェクトタイプに変換し、それらを(Java CalendarまたはJodaTimeを使用することをお勧めします)カレンダークラスに比較するクエリが必要になります。そこに到達したら、カレンダーの1つから1か月を減算し、2つの間の差(日、時間など)を比較すると、正確な結果が得られます。Java Calendar.add()およびCalendar.before()またはafter()メソッドを参照してください。

于 2013-03-27T20:49:04.537 に答える