有一种语法允许将时间戳转换为各种日期部分,包括unix时期。这个工作如下(至少在最新的PostgreSQL中):
SELECT EXTRACT(EPOCH FROM "ts") FROM...
但是,jOOQ似乎不支持这种语法,我发现this discussion证明了这一点,它链接到jOOQ github上仍然打开的Issue #2132。
这有什么变通方法?如何在jOOQ的语法中模拟这种行为(即不必在纯SQL中编写整个查询)?
答案 0 :(得分:4)
您可以随时使用jOOQ求助plain SQL:
public static Field<Integer> extractEpochFrom(Field<Timestamp> field) {
return DSL.field("extract(epoch from {0})", Integer.class, field);
}
目前(jOOQ 3.11)对其他非标准DatePart
类型的实验支持,例如DatePart.EPOCH
。它可能已经与PostgreSQL一起使用,但不适用于其他数据库。
此支持将在未来版本中得到改进,包括jOOQ 3.12,请参阅:https://github.com/jOOQ/jOOQ/issues/7794
答案 1 :(得分:1)
只是想添加org.jooq.impl.DSL.timestampDiff(...)
,以防您需要使用纪元来计算两个时间戳之间的差异(以毫秒为单位)。
答案 2 :(得分:0)
我确定应该有更少的怪物:
t=# select
(extract('DAY' from now()-'1970-01-01')*60*60*24 + extract(seconds from now())+ extract(minutes from now())*60 + extract(hours from now())*60*60)
-
extract(epoch from now())
;
?column?
----------
0
(1 row)
Time: 0.315 ms