【问题标题】:SpringBoot/PostgreSQL:PLSQLException: syntax at or near ":"Spring Boot/PostgreSQL:PL SQL 异常:“:”处或附近的语法
【发布时间】:2021-07-22 14:14:28
【问题描述】:

我正在构建一个 springboot 应用程序,使用 postgreSQL 作为我的数据库。我需要通过自定义查询从后端获取数据,我在存储库文件中已提到如下:

@Repository
public interface RoleRepository extends JpaRepository<Roles, Long>{
  @Query(value="select * from roles where role_date::timestamp::date = CURRENT_DATE", nativeQuery=true)
  List<Roles> findByroleDate();
}

如果我直接在 PGAdmin 上执行查询,它可以正常工作,但通过代码它会抛出一个错误,指出 org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"

可能是什么问题?非常感谢任何帮助!

【问题讨论】:

  • role_date 是什么数据类型?施放那两次似乎毫无意义
  • 时间戳。我发现这种方法只是比较互联网上 DB 的日期,并且直接在 DB 上尝试时有效,所以我继续使用它:D
  • 如果这已经是timestamp,那么将其转换为timestamp 不会改变任何东西
  • 是的……是的。老实说,我没有太注意它,因为它起作用了。我的错。无论如何感谢您的回答!

标签: postgresql spring-boot hibernate jpa


【解决方案1】:

Hibernate 对 :: 运算符感到困惑。您可以使用cast() 运算符解决此问题:

select * from roles where cast(role_date as date) = CURRENT_DATE

如果是timestamp,则首先将列转换为timstamp 是没有用的,因此您只需转换为一个日期即可删除时间。


如果您关心性能并希望使用role_date 上的索引,则根本不应该强制转换该列:

select * 
from roles 
where role_date >= CURRENT_DATE
  and role_date < CURRENT_DATE + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2011-10-25
    • 2018-01-26
    • 2014-04-26
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多