版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、MyBatis中连接oracle按日月年统计写sql时遇到如下错误:
Caused by: java.sql.SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式
二、解决办法:
我的sql中是如下导致报错
SELECT
to_char(DATE, #{dateFormat}) as time,
round(avg(A), 2) a,
max(DATE) dateRecv
FROM
T_表名
WHERE 1=1
<if test="date!=null and date!=''">
and to_char(DATE, #{dateFormat}) LIKE '%${date}%'
</if>
GROUP BY to_char(DATE, #{dateFormat})
ORDER BY time NULLS LAST
错误原因:#{}
预编译语句 -> ?
作占位符 最后会被解析成 '你传过来的值'
,但是在这里它并没有给我们解析出来!!!
为什么呢? 在sql中#
是注释!!!
让小编将sql拷贝到Navicat中给你们看看吧,#
后面的sql变灰了…
解决:换用${}
原样输出结果 即可
SELECT
to_char(DATE, '${dateFormat}') as time,
round(avg(A), 2) a,
max(DATE) dateRecv
FROM
T_表名
WHERE 1=1
<if test="date!=null and date!=''">
and to_char(DATE, '${dateFormat}') LIKE '%${date}%'
</if>
GROUP BY to_char(DATE_AQI, '${dateGroup}')
ORDER BY time NULLS LAST