1

I'm trying to use HQL to find records where two date fields are within 1 month of each other.

Query query = session.createQuery("from com.ep.cqprojects.db.Projects "
    + "where active_date - kickoff_meeting_date < interval '1' month ");

Unfortunately the database used apparently doesn't understand interval.

How can I compare the interval between two date fields?

4

2 回答 2

2

它必须是一个日历月吗?恐怕在这种情况下没有好的 HQL-only 解决方案。你能得到的最接近的是:

from com.ep.cqprojects.db.Projects
 where active_date - kickoff_meeting_date < 31
   and month(active_date) - month(kickoff_meeting_date) < 2

month()是 ANSI SQL 函数,因此希望您的数据库引擎应该支持(顺便说一句,那是什么数据库?)需要第二个条件来清除active_date上个月最后一天和下个月kickoff_meeting_date第一天以及它们之间的月份的情况少于 31 天。
如果需要,您可以进一步延长此时间以处理时间。但是,最终,您最好获得近似结果并在代码中进一步重新检查/过滤它们。

于 2009-07-28T21:17:41.673 回答
0

唉,JPQL 还没有完全实现。要准确比较两个日期字段,需要查询以将相关实体纳入日期(DATE 或 TIMESTAMP)Java/JPA 对象类型,然后比较它们(建议使用 Java Calendar 或 JodaTime)日历类。在那里,从其中一个日历中减去一个月,然后比较两者之间的差异(以天、小时等为单位)将产生准确的结果。请参阅 Java Calendar.add() 和 Calendar.before() 或 after() 方法。

于 2013-03-27T20:49:04.537 回答