使用 Jooq 从 H2 检索平均值时出现截断错误

问题描述

我正在尝试使用 Jooq 从 H2 数据库中检索平均值。

代码如下:

double dataSize = context.select(avg(PLC_DATA.LOAD_MAX_TOT))
                         .from(PLC_DATA)
                         .where(PLC_DATA.EVENT_INSTANT
                         .greaterThan(fromInstant)
                         .and(PLC_DATA.EVENT_INSTANT.lessThan(toInstant))
                         .and(PLC_DATA.ID.like("%" + id + "%")))
                         .fetchOneInto(Double.class);

这行代码有效,但结果没有小数(即 628.00)

LOAD_MAX_TOT 列中的数据是整数,我是否必须以某种方式转换整数?


正如 Simon Martinelli 所建议的,错误不在 jooq 中,而是在我的 SQL 代码中。要获得带有小数部分的结果,我需要在应用平均值函数之前转换该值。 这是正确的 SQL 语句:

select avg(cast(PUBLIC.PLC_DATA.LOAD_MAX_TOT as double)) 
   from PUBLIC.PLC_DATA 
   where (PUBLIC.PLC_DATA.EVENT_INSTANT > cast(? as timestamp) and 
          PUBLIC.PLC_DATA.EVENT_INSTANT < cast(? as timestamp) and 
          PUBLIC.PLC_DATA.ID like cast(? as varchar)) 
   {1: TIMESTAMP '2021-03-06 10:23:00',2: TIMESTAMP '2021-03-06 12:32:00',3: '%%'}

以及相应的 Jooq Java 代码:

context.select(avg(cast(PLC_DATA.LOAD_MAX_TOT,Double.class))).
       from(PLC_DATA).
       where(PLC_DATA.EVENT_INSTANT.greaterThan(fromInstant).
       and(PLC_DATA.EVENT_INSTANT.lessThan(toInstant)).
       and(PLC_DATA.ID.like("%" + id + "%"))).
       fetchOneInto(Double.class)

现在的结果是:

Double@242 "628.5714285714286"
value:628.571429

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)