[英]Postgres Interval not working with native spring data JPA query
我创建了一个带间隔的本机查询。 当我在查询中硬编码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”处或附近的语法错误
您不能为这样的间隔提供值。 您需要将参数值与间隔基本单位相乘:
"select * from orders
where created_date < clock_timestamp() - (interval '1' day) * :days"
在处理日子时,您可以将其简化为:
"select * from orders
where created_date < clock_timestamp() - :days"
另一种选择是make_interval()
函数。 您可以为不同的单位传递多个参数。
"select * from orders
where created_date < clock_timestamp() - make_interval(days => :days)"
符号days => ...
是函数调用的命名参数。 如果变量代表小时,您可以使用make_interval(hours => ..)
此条目中提供了一种解决方案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") String toTime
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.