gpt4 book ai didi

java - Hibernate 查询获取日期记录忽略时间戳

转载 作者:行者123 更新时间:2023-12-02 09:27:19 27 4
gpt4 key购买 nike

我在 DB(Oracle) 表之一中有一个时间戳列 tradedate。我使用 hibernate 作为持久层来获取数据并将其存储到数据库。我有一个要求,我需要按日期查询数据库。即,用户从 UI 传递一个日期,我需要根据该日期获取过滤后的数据。

如果 tradedate 列只有日期部分,我的查询将返回正确的记录当 tradedate 列填充时间戳值(即(日期 + 时间))时,就会出现问题。那么查询就不会返回这些值。

例如:假设数据库中有 2010 年 10 月 23 日的 10 条记录,其中 5 条有时间戳条目,5 条没有时间戳条目

所以我的查询只返回没有时间戳的 5 行。

现在我知道我需要从时间戳中提取日期,然后进行比较,以便获得特定日期的所有记录,但我不知道如何使用 Hibernate 和 HQL 完成它

我正在使用的Java/Hibernate中的查询如下

String hql = "选择从 POJO 清算为 POJO,其中 POJO.tradeDate = :date";查询 query = getSession().createQuery(hql);查询.setParameter("日期", 日期);

最佳答案

String hql = "from POJO as POJO where to_date(to_char(POJO.tradeDate, 'DD-MON-YY'), 'DD-MON-YY') = :date"; 
Query query = getSession().createQuery(hql);
query.setParameter("date", date);

[编辑]

请注意,如果您遵循上述查询,则不会使用 tradeDate 上的索引(如果有)。如果存在一些性能问题,您可以这样做,

String hql = "from POJO as POJO where POJO.tradeDate between :date and :ceilDate"; 
Query query = getSession().createQuery(hql);
// a date having timestamp part, 00:00:00.0, or missing completely
query.setParameter("date", date);
// a date having timestamp part, 23:59:59.999
query.setParameter("ceilDate", ceilDate);

关于java - Hibernate 查询获取日期记录忽略时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com