2011-09-09 13 views
0

私はDateオブジェクトを期待していた場合HQL日付クエリ質問

は何か一日を無視/ 05、2011-03-05

のために言うと、私は2011-03ですべてを引っ張ってHQLを使用したいですwhere year(somecolumn) = year(datepassedin) and month(somecolumn) = month(datepassedin)

HQLでは可能ですか?

SQLで行うことがperttyやすいように思わはなく、HQLで

答えて

1

まあHQLは年と月expressions持って、あなたはうまくそれを日付オブジェクトを養うことができます。だから、通常のようにQueryオブジェクトを使用してください。空想的で複雑なものはありません。

0

同じクエリとSQL Serverの2種類の異なるバージョンを試しましたが、where year(somecolumn)のようなものは、ブラケットクエリよりも大幅に遅い(ほとんどの桁違い)。

範囲の先頭に1つ、最後に1つ、日付を2つ作成する必要があります。あなたは、文字列を持っていることを言う:

val data = "2011-03-05" 

どこかには、値を解析するための便利なconstの作成:

val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM") 

をそして:あなたのクエリでは

val yearMonthString = data.substring(0, 7) 

val fromValue = dateFormat.parse(yearMonthString) 
val c: Calendar = Calendar.getInstance(iPutATimeZoneHere) 
c.setTime(fromValue) 
c.add(Calendar.MONTH, 1) 
val toValue = c.getTime 

を、あなたはwhere somecolumn >= :fromValue and somecolumn < :toValueを持っています。

このコードはScalaで書かれていますが、標準のJavaライブラリを使用しています。