不使用QueryDSL转换yearweek函数

时间:2018-06-04 08:42:35

标签: hql jpql querydsl week-number

我想使用QueryDSL支持的yearweek()函数。此函数生成查询select year(table1.timestamp)*100 + week(table1.timestamp) as col_0_0_ [...]。但是,这不会在年终结果上返回正确的结果。我已经为这个问题打开了bug report

我宁愿使用内置的SQL yearweek()函数,该函数由例如MariaDB的。有没有办法在QueryDSL中使用SQL函数YEARWEEK(timestamp)?或者是否可以使用QueryDSL的自定义SQL函数,例如以字符串形式给出?

以下是两个实现如何在年终上返回不同结果的示例:

SELECT YEARWEEK("2018-01-01");
→ returns 201753, correct

SELECT YEAR("2018-01-01") * 100 + WEEK("2018-01-01")
→ returns 201800, incorrect

1 个答案:

答案 0 :(得分:0)

我在StackOverflow answer中找到了问题的答案。您可以使用模板解决此问题。

我使用以下模板使用SQL yearweek函数创建数字表达式:

Expressions.numberTemplate(Integer.class, "yearweek({0}, 3)", table1.timestamp);