不使用 QueryDSL 转换 yearweek 函数

Not converting yearweek function with QueryDSL

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

我宁愿使用内置的 SQL yearweek() 函数,它直接被 e.g. 支持玛丽亚数据库。有没有办法在 QueryDSL 中使用 SQL 函数 YEARWEEK(timestamp)?或者是否可以使用带有 QueryDSL 的自定义 SQL 函数,例如作为字符串给出?


下面是一个示例,说明两种实现方式如何 return 在年末产生不同的结果:

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

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

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

我使用以下模板通过 SQL yearweek 函数创建了一个数字表达式:

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