2017-07-18 1 views
1

構成されたDBMSの方言で、生成されたSQLでdatetimeリテラルを生成するComparableExpressionを作成します。 私はこの記事を読んでいます:How to get fully materialized query from querydsl、Long値のリテラルを生成しますが、私は日付やdatetimeを生成する例は見ていません。日付リテラルの書式は、異なるDBMSに特有のものです。 {リテラル形式の日付}、私が生成するためにQueryDsl SQLダイアルを使用してDateTimeリテラルを生成するComparableExpression

dbo.fact_table.tx_date >= {formatted date literal} 

だからWHERE文の中で、私はこれを取得したい

'19931123 00:00:00' (for MSSQL) 

Timestamp '1993-11-23 00:00:00' (for Teradata) 

私が持っている最も近いものは:

Expressions.dateTimeTemplate(Date.class, "{0}", alreadyFormattedDateString); 

しかし、私は自分で日付をフォーマットする必要があります。私は、Dateオブジェクトを提供し、フォーマットを実行するquerydslを取得します。

答えて

0

私の同僚が私に答えてくれました。

querydslがjava.timeをまだサポートしていないため、OffsetDateTimeで始まりますが、java.util.Dateに変換する必要があります。

OffsetDateTime odt = OffsetDateTime.parse("2016-02-01T00:00:00+13:00"); 
Date date = Date.from(odt.toInstant()); 
Expression<Date> expr = Expressions.asDateTime(date); 

MSSQLの方言で、この式のために作らSQLリテラルは、サイモン・ルイスへ

{ts '2016-02-01 00:00:00'} 

おかげです。

関連する問題