我正在尝试在Jooq的嵌套请求中对时间戳字段进行平均。除了Jooq无法将DayToSecond类型BigDecimal转换为DayToSecond字符串,我几乎完成了所有工作,因为它基于字符串表示形式和DayToSecond类似如下形式的表示形式进行转换:00:00:55.646因此转换无法完成,并且会引发异常。我用的是JOOQ 3.11.2那是表格:CREATE TABLE IF NOT EXISTS MISSION ( ID SERIAL PRIMARY KEY, START_DATE TIMESTAMP, SOLVE_DATE TIMESTAMP);这就是JOOQ请求:Field<DayToSecond> SPEED = field("SPEED", DayToSecond.class);Table<Record1<DayToSecond>> nested = context.select( timestampDiff(Tables.MISSION.SOLVE_DATE, Tables.MISSION.START_DATE) .as(SPEED)) .from(Tables.MISSION_USER) .asTable();context.select( avg(nested.field(SPEED)).as("avg"), // Error with this line max(nested.field(SPEED)).as("max"), min(nested.field(SPEED)).as("min")) .from(nested) .fetchOne().into(Efficiency.class);效率类是具有3个int字段(平均,最大,最小)的POJO。那么,有没有一种解决方案可以进行平均DayToSecond?
1 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
您可以DayToSecond
通过从间隔差异中提取秒数并将其作为纯数字在Java中获取,来完全避免:
使用此功能(从部分采取这里):
public static Field<Integer> diff(Field<Instant> field1, Field<Instant> field2) { return DSL.field("extract(epoch from {0} - {1})", Integer.class, field1, field2); }
要更改此设置:
timestampDiff(Tables.MISSION.SOLVE_DATE, Tables.MISSION.START_DATE)
变成这个:
diff(Tables.MISSION.SOLVE_DATE, Tables.MISSION.START_DATE)
然后,您声明SPEED
为:
Field<Integer> SPEED = field("SPEED", Integer.class);
添加回答
举报
0/150
提交
取消