web-dev-qa-db-ja.com

タイムスタンプなしのHQLでの日付比較

Hibernatehqlクエリで2つの日付を比較する必要があります。 Java BeanでJava.util.Dateを使用し、mysqlデータベースのデータ型としてタイムスタンプを使用しています。

select t from Task t where t.modifiedDate > t.endDate;

上記のクエリは、時刻と日付を比較します。上記のクエリの日付を時間なしで比較するにはどうすればよいですか。

11
Sanket Dosi

使用可能な日付関数については、Hibernateのドキュメントを参照してください

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

セクション14.10で、この行に注意してください

second(...), minute(...), hour(...), day(...), month(...), and year(...)

だからこれはうまくいくはずです

... where year(t.endDate) > year(t.startDate) 
    and month(t.endDate) > month(t.startDate)
    and day(t.endDate) > day(t.startDate)

質問を満たすと報告された解決策は

 ... where DATE(t.endDate) > (t.startDate)
18
carbontax

date()関数を使用して提案されたソリューションは、純粋なSQLではないようで、(SQL Serverを使用して)機能しません。元の解決策(日、月、年を個別に比較する)は正しい方向への一歩ですが、この方法で行うことはできません。たとえば、将来の日付の場合、月の場合は日を大きくする必要はありません。ただし、次のSQLは機能するはずです。

( year(t.endDate) > year(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and 
  month(t.endDate) > month(t.startDate) )
or 
( year(t.endDate) = year(t.startDate) 
  and
  month(t.endDate) = month(t.startDate) 
  and
  day(t.endDate) > day(t.startDate) )
0
kundwiramurs