【问题标题】:JOOQ Timestamp precision on query查询时的 JOOQ 时间戳精度
【发布时间】:2019-01-11 20:46:18
【问题描述】:

我有这个 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)以获得必要的值,而无需进行双重转换。

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

谢谢!

【问题讨论】:

    标签: java database postgresql jooq


    【解决方案1】:

    使用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();
    

    【讨论】:

    • 谢谢!我没有在文档中找到它。还有一个问题:如何使用这个新的“as("refdate")”字段进行 orderBy?
    • @KrizsánBalazs:我很乐意回答一个新的堆栈溢出问题
    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2021-09-26
    • 2021-07-12
    • 2017-06-28
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多