如何在 Presto 中搜索 varchar 字段数组中的文本?

Ant*_*ong 5 sql arrays presto sql-like

字段被定义为array(varchar)模式分析。

我想搜索字段包含特定文本模式的记录,说道'ABCD'。

如果我运行这个 SQL:

select * from data_table 
where top_results like '%ABCD%'
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误:

查询失败 (#20190730_021145_23663_dn9fj):第 2:7 行:LIKE 表达式的左侧必须计算为 varchar(实际:array(varchar)

检测某个字符串是否存在的正确语法是什么?

lef*_*oin 5

使用过滤器(数组(T),函数(T,布尔))->数组(T)

它返回包含函数返回 true 的元素的数组。使用基数函数检查数组是否不为空:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;
Run Code Online (Sandbox Code Playgroud)

退货

true
Run Code Online (Sandbox Code Playgroud)

检查另一个值:

SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;
Run Code Online (Sandbox Code Playgroud)

退货

false
Run Code Online (Sandbox Code Playgroud)

希望你明白了。