我有一個包含逗號分隔字串值的資料庫表列,如下所示:
id mycolumn
-- --------
1 A
2 A, B
3 A, B, C
我無法更改它,因為它是一個舊的定制程式資料庫。
我想檢查mycolumn字串串列:
對串列['A'] 的第一個查詢應該回傳記錄1
對串列['A','B'] 的第二個查詢應該是回傳記錄1,2
針對串列['A','B','C'] 的第三個查詢應回傳記錄1,2,3
我需要一個 sql (postgres) 陳述句和進一步的 java 實作javax.persistence.criteria.CriteriaBuilder和javax.persistence.criteria.Predicate。
非常感謝你的提示,安
編輯: 這是我對 javax.persitence 部分的解決方案:
public static void arrayContains(final CriteriaBuilder cb, final List<Predicate> where,
final Expression<String> expression, final String values) {
Expression<String> expressionValues = cb.function("string_to_array", String.class, cb.literal(values), cb.literal(", "));
Expression<String> expressionDb = cb.function("string_to_array", String.class, expression, cb.literal(", "));
where.add(cb.isTrue(cb.function("arraycontains", Boolean.class, expressionValues, expressionDb)));
}
uj5u.com熱心網友回復:
在 PostgreSQL 中使用包含運算子string_to_array(mycolumn,',')的WHERE子句<@,例如
SELECT * FROM t
WHERE string_to_array(mycolumn,',') <@ ARRAY['A','B','C']
請記住,您必須創建與此條件相對應的索引,以防您處理大表,例如GIN索引。
CREATE INDEX idx_t_mycolumn_gin ON t USING gin (string_to_array(mycolumn,','));
演示: db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/349169.html
標籤:爪哇 sql 数据库 PostgreSQL javax.persistence
上一篇:加權隨機選擇
下一篇:用SQL中的變數替換子字串
