我有一個小問題。我有以下查詢應按 externalId 或 carName 進行過濾。該查詢也有效,但該查詢區分大小寫。但是過濾器應該忽略大小寫。
@Query("SELECT d FROM CarLocationEntityView d WHERE d.externalId LIKE %:carNameAndExternalId% OR d.carName LIKE %:carNameAndExternalId% ")
List<CarLocationEntityView> findByCarNameAndExternalId(String carNameAndExternalId);
我正在使用 JPA 和 Postgres Sql 資料庫。
第一次嘗試:
@Query("SELECT d FROM CarLocationEntityView d WHERE d.externalId LIKE %:carNameAndExternalId% OR d.carName LIKE '%:carNameAndExternalId% COLLATE latin1_general_cs' ")
List<CarLocationEntityView> findByCarNameAndExternalId(String carNameAndExternalId);
不起作用
第二次嘗試:
@Query("SELECT d FROM CarLocationEntityView d WHERE d.externalId LIKE %:carNameAndExternalId% OR d.carName LIKE low(%:carNameAndExternalId% )")
List<CarLocationEntityView> findByCarNameAndExternalId(String carNameAndExternalId);
也不行
第三次嘗試:
@Query("SELECT d FROM CarLocationEntityView d WHERE d.externalId LIKE %:carNameAndExternalId% OR d.carName ILIKE %:carNameAndExternalId% ")
List<CarLocationEntityView> findByCarNameAndExternalId(String carNameAndExternalId);
也不行
uj5u.com熱心網友回復:
嘗試ILIKE代替LIKE,應該可以,請參閱此處的檔案:
可以使用關鍵字 ILIKE 代替 LIKE 使匹配根據活動區域設定不區分大小寫。這不在 SQL 標準中,而是 PostgreSQL 擴展。
uj5u.com熱心網友回復:
JPQL 2.1 添加了 FUNCTION 來呼叫特定于資料庫的操作,但 ILIKE 在其中不起作用。有一些特定于 JPA 提供程式的選項,但通常我看到專案只是在字串上使用較低,類似于您的第二次嘗試,但在兩個字串上進行不區分大小寫的比較。就像是:
"SELECT d FROM CarLocationEntityView d WHERE d.externalId LIKE %:carNameAndExternalId% OR lower(d.carName) LIKE lower(concat('%', :carNameAndExternalId,'%') )"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331674.html
標籤:PostgreSQL jpa
上一篇:psql:錯誤:連接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服務器失敗:致命:用戶“postgres”的對等身份驗證失敗(Ubuntu)
下一篇:JBDI-吃掉部分SQL陳述句
