Snowflake cloud data platform 雪花SQL-如何使用数组变量查询IN子句

Snowflake cloud data platform 雪花SQL-如何使用数组变量查询IN子句,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,如何将一个变量设置为一个值数组,该数组将在in子句中使用 这项工作: SELECT * FROM TableA WHERE Col1 IN ('Value1', 'Value2', 'Value3'); 但是我不知道如何从手动指定的数组中创建一个要使用的变量。我想这样做: SET values = ('Value1', 'Value2', 'Value3'); SELECT * FROM TableA WHERE Col1 IN $values; 报告的错误: SQL编译错误:

如何将一个变量设置为一个值数组,该数组将在in子句中使用

这项工作:

SELECT *
  FROM TableA
 WHERE Col1 IN ('Value1', 'Value2', 'Value3');
但是我不知道如何从手动指定的数组中创建一个要使用的变量。我想这样做:

SET values = ('Value1', 'Value2', 'Value3');

SELECT *
  FROM TableA
 WHERE Col1 IN $values;
报告的错误:
SQL编译错误:赋值左边的变量数(1)不等于右边的值数(3)

那么,我如何才能为此创建一个arary变量呢?

在这样的用例中,ARRAY_CONTAINS()函数可以是您的朋友,示例如下:

create or replace temporary table TableA (Col1 varchar(100));
insert into TableA values ('hello'), ('stuff'), ('Value1'), ('Value2'), ('goodbye');

SET search_4me = '["Value1","Value2","Value3"]';

select *
from   TableA
where  array_contains(Col1::variant, parse_json($search_4me));
^^^两行返回Value1和Value2

我希望这有助于…Rich


p、 美国。如果这个(或另一个)答案对您有帮助,请花点时间“接受”答案,通过单击答案旁边的复选标记将其从“灰显”切换到“填充”。可以使用
中的
。先决条件是首先将“list”变量转换为行

-- sample table
CREATE OR REPLACE TABLE t AS SELECT $1 AS col FROM VALUES ('a'),('b'),('c'),('d');
案例1:使用JSON和:

案例2:使用字符串和:

SET lst = '["a","b","e"]';

SELECT value::STRING FROM TABLE(FLATTEN(input=>parse_json($lst)));
/*
a
b
e
*/

SELECT * 
FROM t
WHERE col IN (SELECT value::STRING FROM TABLE(FLATTEN(input=>parse_json($lst))));
/*
a
b
*/
SET lst2 = 'a,b,e';

SELECT VALUE FROM TABLE(SPLIT_TO_TABLE($lst2, ','));
/*
a
b
e
*/

SELECT *
FROM t
WHERE col IN (SELECT TRIM(VALUE) FROM TABLE(SPLIT_TO_TABLE($lst2, ',')));
/*
a
b
*/