2017-07-18 6 views
1

Ich möchte eine ComparableExpression erstellen, die ein Datetime-Literal im generierten SQL im Dialekt des konfigurierten DBMS erzeugt. Ich habe diesen Artikel gelesen: How to get fully materialized query from querydsl, die ein Literal für einen Long-Wert erzeugt, aber ich habe kein Beispiel gesehen, das ein Datum oder Datetime erzeugt. Datums-Literal-Formatierung ist für verschiedene DBMS eigen.QueryDsl ComparableExpression zum Erstellen eines DateTime-Literals mit dem SQL-Dialekt

So in der WHERE-Anweisung möchte ich dies erhalten:

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

Für die {formatiert Datumsliteral}, ich möchte generieren:

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

und

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

Der nächste, den ich habe, ist:

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

Aber dann muss ich das Datum selbst formatieren. Ich möchte das Date-Objekt bereitstellen und Querydsl abrufen, um die Formatierung durchzuführen.

Antwort

0

Mein Kollege hat das für mich beantwortet.

Wir beginnen mit einem OffsetDateTime, müssen aber in java.util.Date konvertieren, da querydsl java.time noch nicht unterstützt.

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

Die SQL wörtliche für diesen Ausdruck in MSSQL Dialekt erzeugt ist

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

Dank Simon Lewis.

Verwandte Themen