gpt4 book ai didi

sql - Derby SQL时间戳算法和JDBC转义语法

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

我的表中有两列,Created(TIMESTAMP)和Lifetime(BIGINT)。生命周期表示为秒。我想将生命周期列添加到时间戳列,并将该结果与另一个日期进行比较。

我引用了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

不幸的是,我得到以下异常:

Exception Description: Syntax error parsing the query [SELECT i.messageId FROM ServerMessageEntity i WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now], unexpected char [{].



似乎解决方案是将秒数添加到创建的时间戳中,并使结果成为另一个时间戳。任何帮助或语法如何做到这一点,将不胜感激。谢谢!

其他信息:我正在将Oracle TopLink 12c(12.1.2)用于ORM和Derby 10.10.2.0

最佳答案

原来,我的问题是使用“@NamedQuery”存储查询。我通过使用“createNativeQuery”方法进行了实验,并能够获得所需的结果

String sql = "SELECT MESSAGEID FROM \"TABLE\".SERVERMESSAGES WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, LIFETIME, CREATED)} < ?"
Query query = entityManager.createNativeQuery(sql);

关于sql - Derby SQL时间戳算法和JDBC转义语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23225772/

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