不使用 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);
我想使用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);