【发布时间】:2018-11-08 22:28:20
【问题描述】:
我需要找到所有带有now() - date > 5 min 日期字段的记录
试过了
.and(DSL.timestampDiff(now, TABLE_HISTORY.DATE).gt(DayToSecond.valueOf((1/86400).toDouble())))
但是ofc不成功
【问题讨论】:
标签: postgresql kotlin jooq
我需要找到所有带有now() - date > 5 min 日期字段的记录
试过了
.and(DSL.timestampDiff(now, TABLE_HISTORY.DATE).gt(DayToSecond.valueOf((1/86400).toDouble())))
但是ofc不成功
【问题讨论】:
标签: postgresql kotlin jooq
将列移到等式的一侧,将常数移到另一侧总是更好。这样,可以应用放置在列上的索引。因此:
date < now() - interval '5 minutes'
或者在 jOOQ 中
TABLE_HISTORY.DATE.lt(now.sub(new DayToSecond(0, 0, 5)))
或者使用 Kotlin 的运算符重载:
TABLE_HISTORY.DATE.lt(now - new DayToSecond(0, 0, 5))
【讨论】:
TABLE_HISTORY.DATE.lt(DSL.currentTimestamp() - DayToSecond(0, 0, 5)))
< 因为返回类型?
a < b 被 Kotlin 翻译成 a.compareTo(b) < 0,这在 jOOQ 上下文中没有意义。见:kotlinlang.org/docs/reference/…