どのように私はjOOQクエリではPostgresのto_char関数を使用していますか?

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()私が考えてあなたが何をしようとしていることは、あなたからの切り捨ての時間情報であること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();

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=187254&siteId=1