2017-07-18 32 views
1

我想創建一個ComparableExpression,它將在生成的SQL中以配置的DBMS的方言生成日期時間文字。 我讀過這篇文章:How to get fully materialized query from querydsl,它爲Long值產生一個文字,但我沒有看到一個產生日期或日期時間的例子。日期文字格式是不同的DBMS特有的。QueryDsl ComparableExpression使用SQL方言生成DateTime文字

所以在WHERE語句我想這一點:

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

對於{格式化日期文字},我要生成:

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

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

我得到的最接近的是:

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

但是我必須自己格式化日期。我想提供Date對象並獲取querydsl來執行格式化。

回答

0

我的同事已經爲我解答了這個問題。

我們從OffsetDateTime開始,但必須轉換爲java.util.Date,因爲querydsl目前還不支持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); 

此表達MSSQL方言文字產生的SQL是

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

感謝西蒙·劉易斯。