2014-04-22 46 views
2

我有我的表,創建日期(時間戳)和壽命(BIGINT)兩列。生命期以秒錶示。我想將生存時間列添加到時間戳列,並將該結果與另一個日期進行比較。德比SQL時間戳算術和JDBC轉義語法

我引用的derby manual和在部分中的 「爲FN關鍵字JDBC轉義語法」 找到TIMESTAMPADD支持:

{FN functionCall} TIMESTAMPADD(間隔,integerExpression,timestampExpression)

好吧,我試過了:

SELECT i.messageId FROM ServerMessageEntity i 
WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now 

*:現在是我的參數通過傳遞:

query.setParameter 

Unfortunitly我得到以下異常:

異常說明:語法錯誤解析查詢[SELECT i.messageId FROM ServerMessageEntity在哪裏{fn TIMESTAMPADD(SQL_TSI_SECOND,i.lifetime,i.created)}>:now], unexpected char [{]。

似乎解決方案是將秒添加到創建的時間戳並將結果作爲另一個時間戳。任何幫助或語法如何做到這一點,將不勝感激。謝謝!

其他信息:我使用的是Oracle TopLink的12C(12.1.2)的ORM和德比10.10.2.0

回答

0

事實證明,我的問題是使用「@NamedQuery」保存查詢。我通過使用「createNativeQuery」方法進行了實驗,並能夠得到我想要的結果

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