2014-10-03 45 views
-1

我想根據兩個時間戳之間的某些比較提取記錄。這是我認爲的代碼,但它不工作:如何使用時間間隔來編寫查詢以比較兩個時間戳之間的差異

@Query("SELECT n FROM table1 n WHERE n.status IN ('FAILED') AND :currentDate- n.updatedDate > n.interval/24*60*60") 

List<Entity> findAllSuchEntities(@Param("currentDate") DateTime currentDate); 

的錯誤信息是:org.h2.jdbc.JdbcSQLException:未知數據類型:「?」; SQL語句。

相比之下,下面的查詢可以通過編譯:

@Query("SELECT n FROM table1 n WHERE n.status IN ('FAILED') AND :currentDate > n.updatedDate") 

List<Entity> findAllSuchEntities(@Param("currentDate") DateTime currentDate); 
+0

圍繞「:currentDate - n.updatedDate」嘗試括號?如果與H2錯誤消息進行比較,請實際說明使用了什麼SQL – 2014-10-03 17:41:52

+0

第一個查詢中的n.interval是什麼?你能顯示日期的格式嗎? – Rika 2014-10-03 17:49:00

回答

0

試試這個:

@Query("SELECT n FROM table1 n WHERE n.status IN ('FAILED') AND n.updatedDate < (:currentDate - (n.interval/24*60*60))") 

這也是一個較好的解決方案爲您之前的查詢將最有可能導致全表掃描。

+0

我試過這種方法,這裏是錯誤信息:由於:java.lang.IllegalArgumentException:參數值[2014-10-03T15:21:30.527-05:00]不是匹配類型[java.lang.Long]。任何建議? – user1470393 2014-10-03 20:22:32