Postgres Interval不使用本机spring数据JPA查询

时间:2017-05-03 18:14:23

标签: java postgresql spring-data-jpa

我已经创建了一个带有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”

2 个答案:

答案 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