HQL日期查询问题

时间:2011-09-09 18:51:31

标签: hibernate hql

如果我期待一个Date对象,请说明2011-03-05

我希望使用HQL在2011-03中提取所有内容,忽略第05天

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

可以在HQL中完成吗?

在SQL中似乎很容易做到,但在HQL中却没有。

2 个答案:

答案 0 :(得分:1)

HQL有年份和月份expressions,您可以将日期对象提供给它。所以,像往常一样使用Query对象,没有任何花哨或复杂的东西。

答案 1 :(得分:0)

我尝试了同一个查询的两个不同版本,在SQL Server中,类似于where year(somecolumn)的内容比包围查询要慢得多(几乎一个数量级)。

您必须创建两个日期,一个在范围的开头,一个在结尾。假设你有一个字符串:

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