我的表中有两列,Created(TIMESTAMP)和生命周期(BIGINT)。生命周期表示为秒。我想将life列添加到timestamp列,并将该结果与另一个日期进行比较。
我引用了derby manual,并在“fn关键字的JDBC转义语法”部分找到了对TIMESTAMPADD的支持:
{fn functionCall} TIMESTAMPADD(interval,integerExpression,timestampExpression)
好的,所以我试过了:
SELECT i.messageId FROM ServerMessageEntity i
WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now
* :现在是我传入的参数:
query.setParameter
不幸的是,我得到以下例外:
异常说明:解析查询时出现语法错误[SELECT i.messageId FROM ServerMessageEntity i WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND,i.lifetime,i.created)}> :现在], 意外的字符[{]。
似乎解决方案是将秒添加到创建的时间戳,并将结果作为另一个时间戳。任何有关如何执行此操作的帮助或语法将不胜感激。谢谢!
其他信息:我正在使用Oracle TopLink 12c(12.1.2)进行ORM和Derby 10.10.2.0
答案 0 :(得分:0)
事实证明我的问题是使用“@NamedQuery”来存储查询。我通过使用“createNativeQuery”方法进行了实验,并且能够得到我想要的结果
String sql = "SELECT MESSAGEID FROM \"TABLE\".SERVERMESSAGES WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, LIFETIME, CREATED)} < ?"
Query query = entityManager.createNativeQuery(sql);