Snowflake中如何检索字符串数组的值?ARRAY_CONTAINS失效排查
解决Snowflake数组包含判断返回False的问题
问题根源
你当前的CASE语句存在两个关键错误:
- 参数顺序颠倒:Snowflake的
ARRAY_CONTAINS函数语法是ARRAY_CONTAINS(<要查找的元素>, <目标数组>),你把目标数组放在了第一个参数位置,导致判断逻辑完全错误。 - 不必要的数组构造:用
ARRAY_CONSTRUCT('1'::TEXT)会生成一个子数组["1"],此时函数会判断目标数组是否包含这个子数组(而非单个元素'1'),自然返回False。
修正后的SQL
CASE WHEN ARRAY_CONTAINS('1'::TEXT, STRTOK_TO_ARRAY(TABLE.COLUMN1,' '::TEXT)) THEN TRUE ELSE FALSE END AS m_1
简化写法
也可以直接省略CASE语句,因为ARRAY_CONTAINS本身会返回布尔值:
ARRAY_CONTAINS('1'::TEXT, STRTOK_TO_ARRAY(TABLE.COLUMN1,' '::TEXT)) AS m_1
验证示例
对于COLUMN1值为"1 2 9"的行,STRTOK_TO_ARRAY生成数组["1","2","9"],修正后的函数会正确识别数组中包含元素'1',返回TRUE。
内容的提问来源于stack exchange,提问作者ssubr
相关产品推荐
相关产品推荐

