如何在 Presto 的 varchar 字段数组中搜索文本?
How to search for text in an array of varchar field in Presto?
一个字段在 modeanlyatic 中被定义为 array(varchar)
。
我想搜索字段包含特定文本模式的记录,如 'ABCD'
。
如果我运行这个SQL:
select * from data_table
where top_results like '%ABCD%'
它抛出这个错误:
Query failed (#20190730_021145_23663_dn9fj): line 2:7: Left side of
LIKE expression must evaluate to a varchar (actual: array(varchar)
检测特定字符串是否存在的正确语法是什么?
使用filter(array(T), function(T, boolean)) -> array(T)
它 returns 包含函数 returns 为真的元素的数组。使用基数函数检查数组是否不为空:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;
Returns
true
检查另一个值:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;
Returns
false
希望你明白了。
将其转换为json字符串,然后搜索字符串
json_format(cast(top_results as JSON))
select * from data_table
where json_format(cast(top_results as JSON)) like '%ABCD%'
一个字段在 modeanlyatic 中被定义为 array(varchar)
。
我想搜索字段包含特定文本模式的记录,如 'ABCD'
。
如果我运行这个SQL:
select * from data_table
where top_results like '%ABCD%'
它抛出这个错误:
Query failed (#20190730_021145_23663_dn9fj): line 2:7: Left side of LIKE expression must evaluate to a varchar (actual: array(varchar)
检测特定字符串是否存在的正确语法是什么?
使用filter(array(T), function(T, boolean)) -> array(T)
它 returns 包含函数 returns 为真的元素的数组。使用基数函数检查数组是否不为空:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;
Returns
true
检查另一个值:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;
Returns
false
希望你明白了。
将其转换为json字符串,然后搜索字符串
json_format(cast(top_results as JSON))
select * from data_table
where json_format(cast(top_results as JSON)) like '%ABCD%'