【问题标题】:HQL date query questionHQL日期查询问题
【发布时间】:2011-09-09 18:51:30
【问题描述】:

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

我想在 2011-03 年使用 HQL 拉取所有内容,忽略该天/05

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

可以用 HQL 做吗?

在 SQL 中似乎很容易做到,但在 HQL 中却不是

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    HQL 有年份和月份expressions,你可以给它提供日期对象就好了。所以,像往常一样使用Query 对象,没有什么花哨或复杂的。

    【讨论】:

      【解决方案2】:

      我尝试了同一个查询的两个不同版本,在 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 库。

      【讨论】:

        猜你喜欢
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        相关资源
        最近更新 更多