【问题标题】:How to query data base on Date, but your DB store date as date + time.如何根据日期查询数据库,但您的数据库将日期存储为日期+时间。
【发布时间】:2011-09-26 05:44:13
【问题描述】:

由于我想在表X 中存储每个数据的日期和时间,所以我使用

@Temporal(TemporalType.TIMESTAMP)
private Date dateProcess;    //java.util.Date

这很好用。但现在我想创建在同一日期返回所有数据的查询。所以我试试

SELECT c from X c where c.dateProcess = : dateProcess

然后我会为参数dateProcess 传递一个java.util.Date,但返回的结果列表是空的。我想一定是time 出现在这里。所以如果这两个日期没有确切的日期和时间,它就不会相等,这就解释了为什么我返回的结果列表是空的。那么在这种情况下如何返回一个基于日期的数据库列表(不关心时间)?

【问题讨论】:

    标签: java datetime jakarta-ee jpa jpql


    【解决方案1】:

    只需使用日期范围,指定开始和结束时间。 > startTime 和

    【讨论】:

    【解决方案2】:

    试试TemporalType.DATE

    如果您需要保留时间,但只查询日期,那么您可以选择:

    • 使用 JPQL 日期函数 - day(..), months(..), year(..)
    • 使用 <> 作为日期范围(正如 James 建议的那样)
    • 将日期和时间存储在两个不同的列中。

    【讨论】:

    • 抱歉,前几天比较忙,无法及时回复,对此我深表歉意。如果我切换到TemporalType.Date,我会失去time吗?我也希望日期在其中显示时间。
    • 是的,你输了。但我猜你可以将它存储在不同的列中。查看更新
    • 能否请您展示一个使用 day()、months()、year() 函数的示例 JPQL 查询?
    • 就好像它们是 sql 函数 - 将它们与字段一起用作参数来提取日、月和年
    【解决方案3】:

    temporal type 指定为Date 有帮助还是会丢失精度?

    【讨论】:

    • 如果我切换 TemporalType.Date,我会失去我的 time 精度
    【解决方案4】:

    目前我喜欢这个

    Using HQL to query on a date while ignoring the time on Oracle

    我还没试过这个。所以不确定它会起作用。 date_format 是 release 中注册的函数。

    http://www.docjar.com/html/api/org/hibernate/dialect/MySQLDialect.java.html

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      相关资源
      最近更新 更多