gpt4 book ai didi

java - 如何在 jOOQ 查询中使用 Postgres 的 to_char?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:49 26 4
gpt4 key购买 nike

我正在尝试将以下 PostgreSQL 查询转换为 jOOQ:

SELECT count(*), to_char(created_date, 'YYYY-MM-DD') as year_month_date
FROM log
GROUP BY year_month_date
ORDER BY year_month_date

我有的是:

jooq.select(
DSL.count(),
DSL.field("to_char(created_date, 'YYYY-MM-DD') as year_month_date")
)
.from(LOG)
.groupBy(DSL.field("year_month_date"))
.orderBy(DSL.field("year_month_date"))
.fetch();

有没有一种方法可以使用 jOOQ 的流畅 API 而不必使用字符串?

最佳答案

使用TO_CHAR()

有一个待处理的功能请求,以添加对供应商特定 to_char() 函数的支持:https://github.com/jOOQ/jOOQ/issues/8381

为了对此类功能进行标准化,需要进行更多研究以确保我们能够涵盖每个供应商在此处实现的所有内容,因为不幸的是,格式化逻辑完全是供应商特定的,并且是字符串类型的。

因此,如果您想使用 to_char(),目前,您将不得不求助于使用 plain SQL templating ,你已经做到了。您显然可以以可重用的形式提取此实用程序,例如:

public static Field<String> toChar(Field<?> date, String format) {
return DSL.field("to_char({0}, {1})", SQLDataType.VARCHAR, date, DSL.inline(format));
}

截断日期

当然,在您的特定查询中,您也可以求助于使用标准 SQL 功能,例如 CAST()。我认为您想要做的是截断timestamptimestamptz 列中的时间信息,因此您可以这样做:

SELECT count(*), CAST (created_date AS DATE) d
FROM log
GROUP BY d
ORDER BY d

或者使用 jOOQ:

Field<Date> d = LOG.CREATED_DATE.cast(SQLDataType.DATE);

jooq.select(count(), d)
.from(LOG)
.groupBy(d)
.orderBy(d)
.fetch();

关于java - 如何在 jOOQ 查询中使用 Postgres 的 to_char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com