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

标签 sql arrays sql-like presto

一个字段被定义为 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)
它返回包含函数返回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
希望你有这个想法。

关于sql - 如何在 Presto 的 varchar 字段数组中搜索文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57263468/

相关文章:

java - 如何将此语句从 MySQL 转换为 HQL?

php - 不返回重复数据的 SQL 连接

jquery - 读取页面内容,转换为json,输入SQL?

c++ - 如何在 C++ 中访问成员函数内的对象数组?

javascript - 不需要参数的回调 - 为什么?

SQLite 喜欢 % 和 _

php - 带有 $variable 的 LIKE 运算符

mysql - SQL 基于时间戳差异计算ON Multi table with multi condition - MySQL

python - 什么 ctypes 参数类型用于可变修改的多维数组

MYSQL 选择 LIKE 并匹配空格