【发布时间】:2020-01-17 16:54:57
【问题描述】:
我正在尝试使用 jOOQ for Postgres 编写此查询:
SELECT * FROM my_table t WHERE t.instant1 - t.instant2 > interval '1 days';
所以我写了这个:
Duration oneDay = Duration.ofDays(1);
using(configuration)
.selectFrom(MY_TABLE)
.where(MY_TABLE.INSTANT1.minus(MY_TABLE.INSTANT2).gt(oneDay))
但它没有编译,因为:
无法解析方法'lt(java.time.Duration)'
我尝试将oneDay 包装在val() 中,然后错误变为:
无法解析方法'lt(org.jooq.Param)'
我认为问题在于方法 minus 返回 Field<Instant> 而不是 Field<Duration>,但在 Postgres 中,当减去 2 TIMESTAMP WITH TIME ZONE 时,结果是 interval。
按照这些思路,jOOQ 甚至允许我编写这个在运行时会失败的查询,因为类型不会对齐:
using(configuration)
.selectFrom(MY_TABLE)
.where(MY_TABLE.INSTANT1.minus(MY_TABLE.INSTANT2).gt(Instant.now()))
还有其他我可以使用的 jOOQ 方法吗?除了做类似的事情:
"{0} - {1} > interval '1 day'"
谢谢。
【问题讨论】:
标签: postgresql jooq