gpt4 book ai didi

java - 在 PostgreSQL 的时间戳列上使用 Hibernate 进行日期查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:32 25 4
gpt4 key购买 nike

一个表有时间戳列。其中的示例值可能是 2010-03-30 13:42:42。使用 Hibernate,我正在执行范围查询 Restrictions.between("column-name", fromDate, toDate)。

此列的 Hibernate 映射如下。

<property name="orderTimestamp"  column="order_timestamp" type="java.util.Date" />

比方说,我想找出日期为 2010 年 3 月 30 日和 2010 年 3 月 31 日的所有记录。该字段的范围查询按如下方式完成。

Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);

这行不通。

查询被转换为相应的时间戳,如“2010-03-30 00:00:00”和“2010-03-31 00:00:00”。因此,2010 年 3 月 31 日的所有记录都将被忽略。

解决此问题的一个简单方法是将结束日期设置为“2010-03-31 23:59:59”。但是,我想知道是否有办法只匹配时间戳列的日期部分。

此外,Expression.between() 是否包括这两个限制?文档对此没有任何说明。

最佳答案

, I would like to know if there is way to match only the date part of the timestamp column.

如果您不需要 TIMESTAMP,请使用 DATE(您不应该使用 type="date" 吗?)。

Also, is Expression.between() inclusive of both limits?

SQL BETWEEN 运算符的行为似乎是database dependent .使用 PosgresQL,BETWEEN 表达式:

x BETWEEN y AND z

在语义上等同于:

y <= x AND x <= z

即包容性。

关于java - 在 PostgreSQL 的时间戳列上使用 Hibernate 进行日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543510/

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