2011-09-09 180 views
0

如果我期待一個Date對象地說2011-03-05HQL日期查詢問題

,我想用HQL拉在2011-03一切,忽視了日/ 05

where year(somecolumn) = year(datepassedin) and month(somecolumn) = month(datepassedin)

HQL有可能嗎?

這似乎是pertty容易在SQL做的,而不是在HQL

回答

1

好HQL有年份和月份expressions,你可以給它Date對象就好了。所以,像往常一樣使用Query對象,沒有什麼花哨或複雜的。

0

我試過這個查詢的兩個不同版本,並且在SQL Server中,類似於你所擁有的where year(somecolumn)比括號查詢慢得多(差不多一個數量級)。

您必須創建兩個日期,一個在範圍的開始處,另一個在結束處。你說你有一個字符串:

val data = "2011-03-05" 

某處創建一個方便的常量來解析值:

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庫。