Gol*_*nob 2 java postgresql spring-data-jpa spring-boot
我正在尝试在查询注释中执行以下查询。我正在使用 postgresSQL。但是,如果我在查询中使用“::numeric(10, 2)”,那么我会在“:”处或附近出现语法错误。但如果我删除“::numeric(10, 2)”这个,它就可以正常工作。
@Query(value = "SELECT AVG(feedback_rating)::numeric(10, 2) FROM app_customer_feedback WHERE " +
"created_date >= to_timestamp(:dateFrom, 'yyyy-mm-dd hh24:mi:ss') AND " +
"created_date < to_timestamp(:dateTo, 'yyyy-mm-dd hh24:mi:ss')", nativeQuery = true)
Double getAverageByDateRange(@Param("dateFrom") String dateFrom, @Param("dateTo") String dateTo);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何解决这个问题?谢谢!
冒号需要转义!
解决方案1:转义冒号
Every:需要替换为\\:
AVG(feedback_rating)\\:\\:numeric(10, 2)
Run Code Online (Sandbox Code Playgroud)
@Query(value = "SELECT AVG(feedback_rating)\\:\\:numeric(10, 2) FROM app_customer_feedback WHERE " +
"created_date >= to_timestamp(:dateFrom, 'yyyy-mm-dd hh24:mi:ss') AND " +
"created_date < to_timestamp(:dateTo, 'yyyy-mm-dd hh24:mi:ss')", nativeQuery = true)
Double getAverageByDateRange(@Param("dateFrom") String dateFrom, @Param("dateTo") String dateTo);
Run Code Online (Sandbox Code Playgroud)
解决方案2:双冒号
Every:需要替换为双冒号::
AVG(feedback_rating)::::numeric(10, 2)
Run Code Online (Sandbox Code Playgroud)
@Query(value = "SELECT AVG(feedback_rating)::::numeric(10, 2) FROM app_customer_feedback WHERE " +
"created_date >= to_timestamp(:dateFrom, 'yyyy-mm-dd hh24:mi:ss') AND " +
"created_date < to_timestamp(:dateTo, 'yyyy-mm-dd hh24:mi:ss')", nativeQuery = true)
Double getAverageByDateRange(@Param("dateFrom") String dateFrom, @Param("dateTo") String dateTo);
Run Code Online (Sandbox Code Playgroud)
解决方案 3:使用Cast代替冒号
cast(AVG(feedback_rating) as numeric(10, 2))
Run Code Online (Sandbox Code Playgroud)
@Query(value = "SELECT cast(AVG(feedback_rating) as numeric(10, 2)) FROM app_customer_feedback WHERE " +
"created_date >= to_timestamp(:dateFrom, 'yyyy-mm-dd hh24:mi:ss') AND " +
"created_date < to_timestamp(:dateTo, 'yyyy-mm-dd hh24:mi:ss')", nativeQuery = true)
Double getAverageByDateRange(@Param("dateFrom") String dateFrom, @Param("dateTo") String dateTo);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |