1

我想创建一个 ComparableExpression,它将在生成的 SQL 中以配置的 DBMS 的方言生成日期时间文字。我读过这篇文章:如何从 querydsl 获得完全物化的查询,它为 Long 值生成文字,但我还没有看到生成日期或日期时间的示例。日期文字格式是不同 DBMS 特有的。

所以在 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 进行格式化。

4

1 回答 1

1

我的同事已经为我回答了这个问题。

我们从 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'}

感谢西蒙·刘易斯。

于 2017-07-18T22:24:55.523 回答