当我在一个变量中有一系列值时,您可以使用如下方式将它们传递给 where 子句:
SET LIST = '["LIST1","LIST2"]';
SELECT * FROM TABLE WHERE FILTER IN (SELECT VALUE FROM TABLE(FLATTEN(INPUT => PARSE_JSON($LIST))))
我想使用 ILIKE ANY 做同样的事情,但它只允许您从选择中返回一行
SET LIST = '["%LIST1%","%LIST2%"]';
SELECT * FROM TABLE WHERE FILTER ILIKE ANY (SELECT VALUE FROM TABLE(FLATTEN(INPUT => PARSE_JSON($LIST))))
错误:单行子查询返回多于一行。
所以我需要某种方法来进一步展平列表,但仍允许将其传递给 ILIKE ANY() 函数。
最终结果如下所示,但使用变量 $LIST
SELECT * FROM TABLE WHERE FILTER ILIKE ANY('%LIST1%','%LIST2%')
您正在寻找 ARRAY_CONTAINS,第一个值是单个查找的值,它需要是 VARIANT 类型,因此下面的转换,第二个是 VARIANT ARRAY,它是 PARSE_JSON 为我们生成的。
SET LIST = '["LIST1","LIST2"]';
with example_data as (
select * from values
(1,'LIST1'),
(2,'LIST2'),
(3,'LIST3')
)
SELECT *
FROM example_data as d
WHERE array_contains(d.column2::variant, PARSE_JSON($LIST));
第一栏 | 第2栏 |
---|---|
1 | 列表1 |
2 | 列表2 |