Snowflake中如何将变量列表传入ILIKE ANY函数?
Snowflake中用变量列表实现ILIKE ANY匹配
在Snowflake中,当变量存储值列表时,IN条件可以通过FLATTEN和PARSE_JSON展开实现,但直接套用同样逻辑到ILIKE ANY时会报错:Single-row subquery returns more than one row。
错误原因
原写法中,ILIKE ANY后跟随的是返回多行的子查询,但ILIKE ANY支持的参数是值列表或数组,而非多行子查询,因此触发错误。
解决方案
方法1:直接传入解析后的JSON数组
无需展开,直接将变量解析后的JSON数组传给ILIKE ANY:
SET LIST = '["%LIST1%","%LIST2%"]'; SELECT * FROM TABLE WHERE FILTER ILIKE ANY (PARSE_JSON($LIST));
方法2:通过JOIN实现匹配
如果需要更灵活的逻辑,也可以用JOIN关联展开后的列表:
SET LIST = '["%LIST1%","%LIST2%"]'; SELECT t.* FROM TABLE t INNER JOIN TABLE(FLATTEN(INPUT => PARSE_JSON($LIST))) f ON t.FILTER ILIKE f.VALUE;
两种方法都能实现与SELECT * FROM TABLE WHERE FILTER ILIKE ANY('%LIST1%','%LIST2%')完全一致的效果,且支持通过变量$LIST动态传入匹配规则。
内容的提问来源于stack exchange,提问作者TaxiMike
相关产品推荐
相关产品推荐

