如何减去 Instants 并与 jOOQ 中的 Duration 进行比较
How to subtract Instants and compare with a Duration in jOOQ
我正在尝试使用 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))
但由于以下原因无法编译:
Cannot resolve method 'lt(java.time.Duration)'
我尝试将 oneDay
包装在 val()
中,然后错误更改为:
Cannot resolve method 'lt(org.jooq.Param)'
我认为问题是方法 minus
returns a 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'"
谢谢。
jOOQ 3.12 在区间和区间算术支持方面仍有一些限制。我能想到的最好的方法是改变你的表达方式:
t.instant1 - t.instant2 > interval '1 days'
相当于
t.instant1 > t.instant2 + interval '1 days'
在 jOOQ 中很容易表示:
T.INSTANT1.gt(T.INSTANT2.plus(1))
我正在尝试使用 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))
但由于以下原因无法编译:
Cannot resolve method 'lt(java.time.Duration)'
我尝试将 oneDay
包装在 val()
中,然后错误更改为:
Cannot resolve method 'lt(org.jooq.Param)'
我认为问题是方法 minus
returns a 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'"
谢谢。
jOOQ 3.12 在区间和区间算术支持方面仍有一些限制。我能想到的最好的方法是改变你的表达方式:
t.instant1 - t.instant2 > interval '1 days'
相当于
t.instant1 > t.instant2 + interval '1 days'
在 jOOQ 中很容易表示:
T.INSTANT1.gt(T.INSTANT2.plus(1))