我已经创建了一个带有interval的本机查询。当我在查询中硬编码day
时,查询工作正常:
@Query(value="select * from orders where created_date < clock_timestamp() - interval ' 5 days'",nativeQuery=true)
但是当我提供@Param
这样的数据时:
@Query(value="select * from orders where created_date < clock_timestamp() - interval :day 'days'",nativeQuery=true)
List<Order> getData(@Param("day") String day)
我收到了这个错误:
引起:org.postgresql.util.PSQLException:错误:语法错误 或接近“$ 1”
答案 0 :(得分:3)
您无法为此间隔提供值。您需要使用区间基本单位对参数值进行多次处理:
"select * from orders
where created_date < clock_timestamp() - (interval '1' day) * :days"
在处理日期时,您可以将其简化为:
"select * from orders
where created_date < clock_timestamp() - :days"
答案 1 :(得分:0)
此条目Spring Boot Query annotation with nativeQuery doesn't work in Postgresql
中提供了一种解决方案基本上:
@Query(value="select * from orders where created_date < clock_timestamp() - ( :toTime )\\:\\:interval",nativeQuery=true)
“ toTime”是您存储库中的一个参数,可以是天,小时,分钟...等等(Postgres中的查看间隔文档)@Param(“ toTime”)字符串toTime