这按预期工作:
jdbcTemplate.query(
"select datediff(week, '2017-01-02', creation_date), count(*) from somewhere group by datediff(week, '2017-01-02', creation_date)",
new RowMapper() {
Object mapRow(ResultSet rs, int rowNum) throws SQLException {
return [rs.getObject(1), rs.getObject(2)]
}
}
)
但是当我运行下面的查询时我得到了这个异常:
SQLServerException: Column 'somewhere.creation_date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
查询:
def date = new Date(117, 0, 2)
jdbcTemplate.query(
"select datediff(week, ?, creation_date), count(*) from somewhere group by datediff(week, ?, creation_date)",
new RowMapper() {
Object mapRow(ResultSet rs, int rowNum) throws SQLException {
return [rs.getObject(1), rs.getObject(2)]
}
},
date,
date
)
JPA 实现是 Hibernate 5.0.11。 我在演示中使用了 Spring & Groovy,但实际代码是普通的 java + JPA Criteria,显然存在同样的问题。
为什么这不起作用?我只选择 Group By 子句中的内容。而且日期是一样的:它甚至是同一个实例!
最佳答案
不熟悉 JPA,我不能肯定地说,但我猜那些 ?
被扩展成 @P1
和 @P2
到 SQL Server 时,您的 GROUP BY
将不同于您的 SELECT
。
对于 SQL Server,您的 SQL 语句可能看起来像这样:
SELECT @P1 = '2017-01-02', @P2 = '2017-01-02';
select datediff(week, @P1, creation_date), count(*)
from somewhere
group by datediff(week, @P2, creation_date)
关于java - 为什么 ORDER BY DATEDIFF 在使用 JPA 的 SQL 服务器上引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657946/