2017-07-18 11 views
1

Je souhaite créer une expression comparable qui produira un littéral datetime dans le code SQL généré, dans le dialecte du SGBD configuré. J'ai lu cet article: How to get fully materialized query from querydsl, qui produit un littéral pour une valeur Longue, mais je n'ai pas vu d'exemple qui produise une date ou un datetime. La mise en forme littérale des dates est spécifique aux différents SGBD.QueryDsl ComparableExpression pour produire un littéral DateTime utilisant le dialecte SQL

Ainsi, dans la déclaration où je veux obtenir ceci:

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

Pour la {date au format littéral}, je veux générer:

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

et

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

Le plus proche que j'ai est:

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

Mais alors je dois formater la date moi-même. Je veux fournir l'objet Date et obtenir querydsl pour effectuer le formatage.

Répondre

0

Mon collègue a répondu à ma question.

Nous commençons par un OffsetDateTime mais devons convertir en java.util.Date car querydsl ne supporte pas encore java.time.

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

Le SQL produit littérale de cette expression en dialecte MSSQL est

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

Merci à Simon Lewis.