【问题标题】:cant using "LIKE" in native query spring boot无法在本机查询 Spring Boot 中使用“LIKE”
【发布时间】: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')。 如果我尝试更改“不喜欢”而不是“喜欢”它会运行。 我不想使用查询(不是本机)、命名查询或规范方法,因为它会产生更多错误。 有什么建议吗?。

【问题讨论】:

    标签: spring-boot hibernate-native-query


    【解决方案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 很高兴知道我的回答对您有所帮助。请考虑将其标记为正确,以便它可以帮助其他人也检查此问题! :)
    猜你喜欢
    • 2021-10-13
    • 2020-12-24
    • 2019-05-29
    • 2019-12-18
    • 1970-01-01
    • 2018-09-16
    • 2021-08-21
    • 2020-04-15
    • 2019-03-09
    相关资源
    最近更新 更多