来自 varchar 列表的 presto 过滤器项目

presto filter item from varchar list

我有一个格式如下的列表:

["a", "b", "c", "test_0", "test_1"]

它作为 varchar 存储在我的 table 中。我想过滤掉列表中带有“测试”前缀的任何项目,所以我的输出将是:

["a", "b", "c"]

不确定如何将此列表格式化为数组或过滤出测试项目的最有效方法。

假设所有值都用双引号括起来并且没有转义引号,您可以使用 regexp_extract_all:

将值提取到数组中
regexp_extract_all(v, '"([^"]+)"', 1)

然后,您可以使用 filter 函数删除任何不需要的元素:

filter(v, e -> e NOT LIKE 'test_%')

综合起来:

WITH t(v) AS (VALUES '["a", "b", "c", "test_0", "test_1"]')
SELECT filter(regexp_extract_all(v, '"([^"]+)"', 1), e -> e NOT LIKE 'test_%')
FROM t

如果您的 varchar 值是正确的 JSON 数组,您可以使用 json_parse 和强制转换将其转换为 SQL 数组:

cast(json_parse(v) AS array(varchar))