【问题标题】:Derby SQL Timestamp Arithmetic and JDBC escape syntaxDerby SQL 时间戳算术和 JDBC 转义语法
【发布时间】:2014-04-22 16:56:50
【问题描述】:

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

我引用了derby manual,并在“fn 关键字的 JDBC 转义语法”部分找到了对 TIMESTAMPADD 的支持:

{fn 函数调用} 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 来自 ServerMessageEntity i WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now], 意外的字符 [{]。

似乎解决方案是将秒添加到创建的时间戳,并让结果成为另一个时间戳。任何有关如何执行此操作的帮助或语法将不胜感激。谢谢!

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

【问题讨论】:

    标签: sql jdbc derby toplink


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 2012-07-29
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2010-10-25
      • 2019-08-06
      相关资源
      最近更新 更多