如果我期待一个Date对象,请说明2011-03-05
我希望使用HQL在2011-03中提取所有内容,忽略第05天
类似 where year(somecolumn) = year(datepassedin) and month(somecolumn) = month(datepassedin)
可以在HQL中完成吗?
在SQL中似乎很容易做到,但在HQL中却没有。
答案 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库。