一个字段定义为 array(varchar)
。
我想搜索带有字段的记录包含特定文本模式, 'ABCD'
。
如果我运行此SQL:
select * from data_table
where top_results like '%ABCD%'
它引发了此错误:
查询失败(#20190730_021145_23663_DN9FJ(:第2行:7: 喜欢表达式必须评估varchar(实际:阵列(varchar(
检测某个字符串的存在的正确语法是什么?
使用过滤器(array(t(,function(t,boolean(( - >阵列(t(
它返回包含函数返回true的元素的数组。使用基数功能检查数组是否不是空的:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%ABCD%'))>0 ;
返回
true
检查另一个值:
SELECT cardinality(filter(ARRAY ['123ABCD456', 'DQF', 'ABCD', 'ABC'], x -> x like '%XXX%'))>0 ;
返回
false
希望你有这个主意。
将其转换为JSON字符串,然后搜索字符串
json_format(cast(top_results as JSON))
select * from data_table
where json_format(cast(top_results as JSON)) like '%ABCD%'
我将使用 any_match
为此:
SELECT *
FROM data_table
WHERE any_match(top_results, s -> s like '%ABCD%')