首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL & Postgresql -如何在时间戳字段上执行算法,以便与CURRENT_TIMESTAMP进行比较?

问JPQL & Postgresql -如何在时间戳字段上执行算法,以便与CURRENT_TIMESTAMP进行比较?
EN

Stack Overflow用户
提问于 2016-02-22 22:52:36
回答 1查看 931关注 0票数 0

我在两个环境中有一个表"User“。一种是使用Oracle DB,另一种是Postgresql。我想要做的是检索在过去4小时内创建的所有记录。"User“表有一个"beCreatime”字段,该字段存储记录创建时的时间戳。

我已经在基于Oracle的环境中成功地实现了这一点,使用如下方法:

代码语言:javascript
复制
SELECT u.id, u.userName, u.beCreatime FROM User u WHERE u.beCreatime + 4/24 > CURRENT_DATE

但是,在Postgres环境上使用相同的查询时,我会收到以下错误:

代码语言:javascript
复制
Internal Exception: org.postgresql.util.PSQLException: ERROR: operator does not exist: timestamp without time zone + integer

Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

Position: 100

Error Code: 0

Call: SELECT Id AS a1, UserName AS a2, be_creatime AS a3 FROM BeamUser WHERE ((be_creatime + (? / ?)) > CURRENT_TIMESTAMP) LIMIT ? OFFSET ?     bind => [4 parameters bound] Query: ReportQuery(referenceClass=UserEntity sql="SELECT Id AS a1, UserName AS a2, be_creatime AS a3 FROM BeamUser WHERE ((be_creatime + (? / ?))
CURRENT_TIMESTAMP) LIMIT ? OFFSET ?")

看来Postgres只是不喜欢增加时间戳(u.beCreatime)和4/24。在Postgres环境中有类似于此的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-22 23:00:41

您需要使用一个间隔:

代码语言:javascript
复制
WHERE u.beCreatime + interval '4' hour > CURRENT_DATE

但是不能将'4'作为参数传递,您需要在PreparedStatement中执行如下操作:

代码语言:javascript
复制
WHERE u.beCreatime + (interval '1' hour) * ? > CURRENT_DATE

您确定要将该值与current_date进行比较吗?因为current_date确实而不是在Postgres中包含任何时间信息(就像在DATE中一样,因为缺少“真实”的DATE数据类型)

如果要获得Oracle的行为,就必须使用current_timestamp,因为与Oracle不同,Postgres中的DATE不包含时间部分(包括current_date)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35565542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档