JOOQ时间戳精度查询

时间:2018-08-04 00:15:02

标签: java database postgresql jooq

我有一个原始的PSQL查询,我想将其转换为JOOQ查询:

SELECT DISTINCT date_trunc('day', ref_date) AS refdate
FROM income
WHERE probos_id = :probosId

我能够创建的最佳版本是:

Result<Record1<Timestamp>> result = createQueryBuilder()
    .selectDistinct(incomeTable.REF_DATE.cast(Date.class).cast(Timestamp.class).as("refdate"))
    .from(incomeTable)
    .where(incomeTable.PROBOS_ID.eq(probosId))
    .fetch();

这是生成的查询:

select distinct 
cast(cast("public"."income"."ref_date" as date) as timestamp) as "refdate" 
from "public"."income"
where "public"."income"."probos_id" = ?

我想找到一种更好的方法来设置精度(例如PSQL中的date_trunc),以在不进行doulbe强制转换的情况下获得必要的值。

如果可能的话,我想找到一个本机解决方案而不扩展DSL。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用DSL.trunc(Field, DatePart),即

Result<Record1<Timestamp>> result = createQueryBuilder()
    .selectDistinct(trunc(incomeTable.REF_DATE, DatePart.DAY).as("refdate"))
    .from(incomeTable)
    .where(incomeTable.PROBOS_ID.eq(probosId))
    .fetch();