jOOQ“提取(来自[字段]的时代)”解决方法?

Tom*_* M. 4 sql postgresql jooq

有一些语法允许将时间戳转换为各种日期部分,包括 unix 纪元。其工作原理如下(至少在最新的 PostgreSQL 中):

SELECT EXTRACT(EPOCH FROM "ts") FROM...
Run Code Online (Sandbox Code Playgroud)

然而,jOOQ 似乎不支持这种语法,正如我发现的这个讨论所证明的那样,它链接到jOOQ github 上仍然开放的问题 #2132

对此有哪些解决方法?我如何在 jOOQ 的语法中模拟这种行为(即不必用纯 SQL 编写整个查询)?

Luk*_*der 5

jOOQ 3.10 及更低版本的解决方法

你总是可以使用 jOOQ 使用普通的 SQL

public static Field<Integer> extractEpochFrom(Field<Timestamp> field) {
    return DSL.field("extract(epoch from {0})", Integer.class, field);
}
Run Code Online (Sandbox Code Playgroud)

支持 jOOQ 3.11 及更多

目前 (jOOQ 3.11) 实验性支持其他非标准DatePart类型,例如DatePart.EPOCH. 它可能已经适用于 PostgreSQL,但不适用于其他数据库。

此支持将在未来版本中得到改进,包括 jOOQ 3.12,请参阅:https : //github.com/jOOQ/jOOQ/issues/7794