不能在本机查询弹簧启动中使用“LIKE”

问题描述

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

 @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 服务器中运行此代码并且它工作(?1 = 2。?2 = '2021-06-26')。 如果我尝试更改“NOT LIKE”而不是“LIKE”,它会运行。 我不想使用查询(不是本机)、命名查询或规范方法,因为它会出现更多错误。 有什么建议吗?。

解决方法

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%