RainSear:
私はjOOQに次のPostgreSQLのクエリを変換しようとしています:
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
そのような機能を標準化するためには、より多くの研究は、書式設定ロジックは非常に特定のベンダー、残念ながらあり、かつstringly入力されたとして、必ず私たちは、ここでは各ベンダーが実装するすべてをカバーすることができますことを実行する必要があります。
あなたが使用したいのであれば、to_char()
現在、あなたが使用に頼らなければならないプレーンなSQLのテンプレートがすでにやりました。あなたは明らかなように、再利用可能な形でこのユーティリティをくくり出すことができます:
public static Field<String> toChar(Field<?> date, String format) {
return DSL.field("to_char({0}, {1})", SQLDataType.VARCHAR, date, DSL.inline(format));
}
日付を切捨て
もちろん、あなたの特定のクエリでは、あなたはまたのような標準のSQL機能を、使用に頼ることができCAST()
。私が考えてあなたが何をしようとしていることは、あなたからの切り捨ての時間情報であることtimestamp
やtimestamptz
あなたの代わりにこれを行うことができるように、カラム:
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();