一个表有时间戳列。其中的示例值可能是 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/