我有以下查詢:
@Query("SELECT d FROM CarportLocationEntityView d WHERE d.externalId LIKE %:filterCriteria% OR lower(d.carportName) LIKE lower(concat('%',:filterCriteria,'%')) ")
List<CarportLocationEntityView> filterCarportList(@Param("filterCriteria") String filterCriteria);
此查詢在資料庫中搜索兩列:
- 外部ID
- 車棚名稱
兩列都是字串型別,其中 externalId 始終將數字指定為字串。如果我應用查詢并輸入 carportName 的一部分,那么我會得到正確的結果。但是,如果我篩選 externalId 并在引數中僅輸入 externalId 的一部分,那么我將得不到任何資料。
例如: localhost:8080/filter?filterCriteria=100 這里我沒有得到任何資料。
但是如果我對整個 externalId localhost:8080/filter?filterCriteria=1000000 進行過濾,那么我會得到匹配的資料集。
為什么查詢中的 % 運算子不適用于包含數字的字串?
uj5u.com熱心網友回復:
@Query("SELECT d FROM CarportLocationEntityView d WHERE d.externalId LIKE %:#{#filterCriteria}% OR lower(d.carportName) LIKE %:#{#filterCriteria.toLowerCase()}% ")
List<CarportLocationEntityView> filterCarportList(@Param("filterCriteria") String filterCriteria);
參考:
- 使用 SpEL 運算式- Spring Data JPA 參考檔案
也可以看看:
- 如何在 Spring Boot 中記錄 SQL 陳述句?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355793.html
