更新于
ChatGPT
Q
PG 有个字段 paths 是个列表的 string, 我现在要去 列表中包含 abc 的列
A
在 PostgreSQL 中,如果你有一个字段 paths 是一个字符串列表(数组),并且你需要查询列表中包含特定字符串(例如 abc)的记录,可以使用 ANY 或 unnest 结合 LIKE 来实现。
以下是两种实现方式:
1. 使用 ANY
SELECT *
FROM your_table
WHERE 'abc' = ANY(paths);
这种方法适用于 完全匹配 的情况。如果你需要匹配包含 abc 的字符串,可以结合 array_to_string 或使用更复杂的条件:
SELECT *
FROM your_table
WHERE EXISTS (
SELECT 1
FROM unnest(paths) AS path
WHERE path LIKE '%abc%'
);
2. 使用 unnest 和 LIKE
如果你想解开数组并对其应用更复杂的字符串匹配,可以使用 unnest:
SELECT DISTINCT t.*
FROM your_table t
JOIN LATERAL unnest(t.paths) AS path ON path LIKE '%abc%';
解释
unnest(paths):将数组字段解包为单独的行。LIKE '%abc%':匹配数组中的字符串是否包含abc。DISTINCT:防止由于数组中多个值匹配而导致重复的结果。
如果你想要查询结果只返回匹配的字段而不是整个记录,可以改为:
SELECT t.id, path
FROM your_table t
JOIN LATERAL unnest(t.paths) AS path ON path LIKE '%abc%';
这里 t.id 是你的主键字段,path 是匹配的具体值。
你可以根据需求选择合适的方法。