无法在本机查询 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”,