无法在本机查询 Spring Boot 中使用“LIKE”

Posted

技术标签:

【中文标题】无法在本机查询 Spring Boot 中使用“LIKE”【英文标题】:cant using "LIKE" in native query spring boot 【发布时间】:2021-06-28 10:02:20 【问题描述】:

我尝试通过查询获取用户订单:

 @Query(value = "SELECT * FROM ORDERS WHERE USER_ID = ?1 AND CAST(CREATE_AT AS NVARCHAR(100))  LIKE ?2 OR CAST(GRAND_TOTAL AS NVARCHAR(100))  LIKE ?2 OR CAST(STATUS AS NVARCHAR(100))  LIKE ?2"  , nativeQuery = true)
Page<Order> getOrdersByUserSearch(int userID, String searchS, Pageable pageable);

但它总是返回空列表。我在 SQL Server 中运行此代码并且它可以工作(?1 = 2。?2 = '2021-06-26')。 如果我尝试更改“不喜欢”而不是“喜欢”它会运行。 我不想使用查询(不是本机)、命名查询或规范方法,因为它会产生更多错误。 有什么建议吗?。

【问题讨论】:

【参考方案1】:

SQL like 查询需要 % 以及匹配值。如果查询中出现ordered parameters,我们可以使用:

    @Query("SELECT m FROM Movie m WHERE m.rating LIKE ?1%")
    List<Movie> searchByRatingStartsWith(String rating);

点击here了解更多信息。

在你的情况下,查询字符串应该是这样的:

SELECT * FROM ORDERS WHERE USER_ID = ?1 AND CAST(CREATE_AT AS NVARCHAR(100))  LIKE %?2% OR CAST(GRAND_TOTAL AS NVARCHAR(100))  LIKE %?2% OR CAST(STATUS AS NVARCHAR(100))  LIKE %?2%

【讨论】:

谢谢!它有效,我的 sql 错误,应该是:@Query(value = "SELECT * FROM ORDERS WHERE USER_ID = ?1 AND( CAST(ORDER_ID AS NVARCHAR(100)) LIKE %?2% OR CAST(CREATE_AT AS NVARCHAR( 100)) LIKE %?2% OR CAST(GRAND_TOTAL AS NVARCHAR(100)) LIKE %?2% OR CAST(STATUS AS NVARCHAR(100)) LIKE %?2%)", nativeQuery = true) @THANHTÍNHSHR 很高兴知道我的回答对您有所帮助。请考虑将其标记为正确,以便它可以帮助其他人也检查此问题! :)

以上是关于无法在本机查询 Spring Boot 中使用“LIKE”的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的本机 SQL 查询?

如何根据postgres的jsonb列的where条件(无本机查询)使用jpa在spring boot中选择数据?

使用带有 LIKE 的 mysql 本机查询的 spring boot 搜索返回空

Spring Boot JPA - 本机查询双撇号上的 SQL 错误

未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询

在 Spring Boot 中向本机查询添加参数会导致“org.hibernate.exception.SQLGrammarException”,