修改雪花中的用户输入值

时间:2021-03-29 20:57:47

标签: snowflake-cloud-data-platform

我需要读取用户传递的字符串,然后修改字符串以获得所需的格式并将其作为 where 条件传递给视图。

示例 用户输入以逗号“12345,78990,456789”分隔的材料编号列表。这个字符串必须修改为

MATCH("BOM_PATH",'12345') OR MATCH("BOM_PATH",'78990') OR MATCH("BOM_PATH",'456789 ')

所以基本上我需要将所有材料从输入字符串中分离出来,并在一个名为 BOM_PATH 的字段中搜索这些单独的材料,该字段的值类似于 '12345:098765:784526'

我尝试使用 Snowflake SQL UDTF,但它不支持变量或多个 SQL 语句,并且 Snowflake 视图不支持参数。

所以请建议我如何在 Snowflake 中实现这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用 ARRAY_CONTAINS() 函数将输入转换为 STRTOK_TO_ARRAY() 数组。

create or replace table bom_table(BOM_PATH varchar);
insert into bom_table (BOM_PATH)
values
('12345'),
('55555'),
('77778'),
('78990');

select * from bom_table 
where 
ARRAY_CONTAINS(BOM_PATH::variant,STRTOK_TO_ARRAY('12345,78990,456789',','));

或者,如果您的 BAM_PACH 也是一个分隔列表 - 使用 ARRAY_INTERSECTION()ARRAYS_OVERLAP()

insert into bom_table (BOM_PATH)
values
('12345:098765:784526'),
('12346:098766:784527'),
('12345:098765:777777'),
('12399:098765:777773');

select ARRAY_INTERSECTION(STRTOK_TO_ARRAY(BOM_PATH,':'),STRTOK_TO_ARRAY('12345,78990,456789',',')) from bom_table 
where ARRAYS_OVERLAP(STRTOK_TO_ARRAY(BOM_PATH,':'),STRTOK_TO_ARRAY('12345,78990,456789',','));