【问题标题】:JPQL Query Date with intervalJPQL 查询日期与间隔
【发布时间】:2011-07-20 09:19:11
【问题描述】:

我正在使用 JPA 和 JPQL。我是这个世界上的新人;-) 我的查询现在给我两个日期之间的数据。

Query query =em.createQuery("SELECT d FROM DTable d JOIN d.history p WHERE (d.vehicle.id = :vehicleId) AND (p.timestamp BETWEEN :curentDate AND :date)");

我如何告诉 JPQL 过滤他在 2 个日期之间但以 4 分钟的时间间隔提供给我的数据?

我希望它很清楚。 谢谢你的建议。

【问题讨论】:

  • 我的意思是在结果中,两个 p.timestamp 之间至少相差 4 分钟。
  • 你能举个例子吗?我不明白你的数据是什么,你的预期结果是什么。
  • 这是我的结果:2011 年 3 月 22 日星期二 17:39:52 CET 2011 年 3 月 22 日星期二 17:37:52 CET 2011 年 3 月 22 日星期二 17:35:52 CET 2011 年 3 月 22 日星期二 17:33: 52 CET 2011 Tue Mar 22 17:31:52 CET 2011 Tue Mar 22 17:29:52 CET 2011 我需要这个: Tue Mar 22 17:39:52 CET 2011 Tue Mar 22 17:35:52 CET 2011 Tue Mar 22 17:31:52 CET 2011 2011 年 3 月 22 日星期二 17:27:52 CET 2011

标签: java sql hibernate jpa jpql


【解决方案1】:

您的要求:提供的两个日期之间的差应至少四分钟。根据 JPA 1.0 规范,日期之间的比较表达式必须遵循此模式

datetime_expression comparison_operator datetime_expression

comparison_operator 可以是 =、>、>=、。你能做的是

如下所示获取您提供的日期之间的差异

Timestamp dateA ...
Timestamp dateB ...

Timestamp difference = new Timestamp(Math.abs(dateA.getTime() - dateB.getTime()));

并创建一个Timestamp 代表 4 分钟

Timestamp fourMinutes = new Timestamp(0, 0, 0, 0, 4, 0, 0);

现在您的查询应该看起来像

where :difference >= :fourMinutes

【讨论】:

  • 谢谢它的帮助,但我不知道查询中的时间戳 dateA Timestamp dateB 我正在询问数据,该数据应介于日期 c 和今天之间,我只需要间隔 4 分钟的数据在日期。抱歉,我的问题不清楚。
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
相关资源
最近更新 更多