postgresql - 如何减去瞬间并与 jOOQ 中的持续时间进行比较

标签 postgresql 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)'

我尝试包装oneDayval()然后错误改为:

Cannot resolve method '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'"

谢谢。

最佳答案

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))

关于postgresql - 如何减去瞬间并与 jOOQ 中的持续时间进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779081/

相关文章:

ruby-on-rails - 在 Postgres 上使用 Rails 的日期时间字段

python - Django Postgres 连接池

sql - 在 PostgreSQL 中将两个或多个不同的 SELECT 查询组合到具有不同条件的同一个表

java - 如何在 jOOQ 中打印异常

java - 尝试使用 Maven 在 JOOQ 中实现 EnumConverter 时出错

typescript - 无法使用 TypeORM + pgAdmin4 连接到在 docker 上运行的本地 PostgreSQL 数据库

sql - Postgresql:使用窗口函数从日期范围中选择最大值

gradle - jooq 不会在 gradle 任务中生成带有 testcontainers 的模型

java - 使用 jOOQ 使用正确的类型转换从 values() 中选择插入

java - 如何使用 jOOQ 处理自定义 SGBD 类型