问题描述
我正在尝试使用 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 (将#修改为@)