繁体   English   中英

Postgres Interval 不适用于本机 Spring 数据 JPA 查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM