我想使用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
答案 0 :(得分:0)
我在StackOverflow answer中找到了问题的答案。您可以使用模板解决此问题。
我使用以下模板使用SQL yearweek函数创建数字表达式:
Expressions.numberTemplate(Integer.class, "yearweek({0}, 3)", table1.timestamp);