2017-09-13 54 views
1

我對發生的頻率一些與整數值表:JOOQ如何將時間戳和表示毫秒的整數相加?

my_table.frequency(Integer) 
my_table.last_run(Timestamp) 

我想是最後一次運行增加頻率,以檢查它是否比當前時間小於或更高。

這必須在JOOQ中完成。

這基本上是我想要做的。

dsl.selectFrom(FTP_CONFIGURATIONS)     
    .where(FTP_CONFIGURATIONS.DIRECTION.eq("FROM") 
    .and(DSL.timestampAdd(
     FTP_CONFIGURATIONS.LAST_RUN, 
     FTP_CONFIGURATIONS.FREQUENCY.div(1000)), DatePart.SECOND) 
    .lessOrEqual(DSL.currentTimestamp())))     
    .orderBy(FTP_CONFIGURATIONS.ID.desc()) 

我沒有得到我所需要的。爲什麼我不知道,因爲我不知道如何檢查生成的SQL?

+0

如果您的整數編碼「多頻繁」,那麼它不是一個時間戳 - 它是一個[時間間隔](https://www.jooq.org/doc/3.7/manual/reference/reference-data-types/數據類型間隔/)。你應該這樣對待它。 –

+0

一個合理的聲明,可能非常不幸的是,我對數據庫缺乏影響力,無法改變任何事情。如果你的意思是我應該重新思考我的方法。那麼我想念你的觀點,你可以指定一下嗎? – PlickPlick

+0

添加操作是否必須在數據庫中完成?如果你只是獲得這些值並在Java代碼中進行數學運算會怎樣?如果您使用的是Java 8(用於Java的<<持續時間類](https://docs.oracle.com/javase/tutorial/datetime/iso/period.html),那麼您可以使用Java < = 7,還有[ThreeTen Backport](http://www.threeten.org/threetenbp),它有一個[類似的類](http://www.threeten.org/threetenbp/apidocs/org/threeten/) bp/Duration.html)) – 2017-09-13 12:32:36

回答

1

dsl.selectFrom(FTP_CONFIGURATIONS) .where(FTP_CONFIGURATIONS.DIRECTION.eq("FROM") .and(DSL.timestampAdd(FTP_CONFIGURATIONS.LAST_RUN,FTP_CONFIGURATIONS.FREQUENCY.div(1000)),DatePart.SECOND) .lessOrEqual(DSL.currentTimestamp()))) .orderBy(FTP_CONFIGURATIONS.ID.desc())

這實際上是答案,但我不應該把它的信用。這是普羅霍羅夫先生,他讓我建議我應該使用Interval。

我無法實現它的原因是last_run中的舊價值。