如何用SQL判断数组列是否包含指定值并生成标识列
解决数组类型列的包含判断SQL问题
错误原因
你写的SQL语句报错是因为col3是数组类型,而IN关键字后面的'xyz'、'abc'是字符串类型,两者类型不匹配,数据库无法直接将数组和单个字符串做比较,所以抛出错误:IN值和列表项必须具有相同类型:array(varchar)。
正确解决方案
针对数组类型的包含判断,不同数据库有对应的函数或语法,以下是几种常见数据库的写法:
PostgreSQL
使用ANY关键字遍历数组元素,判断是否存在目标值:
select col1, col2, case when 'abc' = ANY(col3) OR 'xyz' = ANY(col3) then 1 else 0 end as new_col from your_table;
BigQuery / Hive
使用内置的数组包含函数ARRAY_CONTAINS(BigQuery)或array_contains(Hive):
-- BigQuery select col1, col2, case when ARRAY_CONTAINS(col3, 'abc') OR ARRAY_CONTAINS(col3, 'xyz') then 1 else 0 end as new_col from your_table; -- Hive select col1, col2, case when array_contains(col3, 'abc') OR array_contains(col3, 'xyz') then 1 else 0 end as new_col from your_table;
结果验证
上述语句会按照预期返回结果:
- 包含
abc或xyz的行,new_col为1 - 空数组或不包含目标值的行,
new_col为0
内容的提问来源于stack exchange,提问作者Chanchal Dutta
相关产品推荐
相关产品推荐

