Spring boot-JPA的@Query不支持”TIMESTAMP“关键字------ORA-00933: SQL 命令未正确结束
问题描述
因sql中需要group by分组以及添加其他Where条件过滤,将写好的sql 在客户端中执行正常获取到结果集,但是在Spring boot的JPA的@Query中去执行该sql就有遇到了惊喜:
Caused by: Error : 933, Position : 95, Sql = SELECT BOND_ID,COUNT(BOND_ID) AS NUM FROM XXXX(数据库表名) WHERE WRITE_TIME = TIMESTAMP :1 AND (BOOK_MANAGER_CODE = :2 OR ORG_CODE =:3 ) GROUP BY BOND_ID , OriginalSql = SELECT BOND_ID,COUNT(BOND_ID) AS NUM FROM KFJK_CDC_PLACING_INFO WHERE WRITE_TIME = TIMESTAMP ? AND (BOOK_MANAGER_CODE = ? OR ORG_CODE =?) GROUP BY BOND_ID , Error Msg = ORA-00933: SQL 命令未正确结束
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513)
... 91 more
问题原因:
Spring boot-JPA的@Query不支持”TIMESTAMP“关键字。
解决方案:
需要将SQL改成:
@Query(value = "SELECT BOND_ID,COUNT(BOND_ID) AS NUM FROM XXXX(数据库表名) WHERE to_CHAR(WRITE_TIME,'yyyy-MM-dd hh24:mi:ss')= ?1 AND (BOOK_MANAGER_CODE = ?2 OR ORG_CODE =?3) GROUP BY BOND_ID ", nativeQuery=true)
即用TO_CHAR函数进行转换字段类型进行where过滤。
版权声明:本文为qq_34594142原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。